ID:               46285
 Updated by:       [EMAIL PROTECTED]
 Reported By:      phpwnd at gmail dot com
-Status:           Open
+Status:           Assigned
 Bug Type:         PDO related
 Operating System: Linux
 PHP Version:      5.3CVS-2008-10-13 (CVS)
-Assigned To:      
+Assigned To:      johannes


Previous Comments:
------------------------------------------------------------------------

[2008-10-13 18:11:31] phpwnd at gmail dot com

I had just submitted this bug when I realized I didn't have to
recompile PHP to test another database library. The same reproduce code
with
  $db = new PDO('sqlite::memory:');

...shows the expected result, so I assume the bug can be attributed to
mysqlnd or possibly PDO_MYSQL.

------------------------------------------------------------------------

[2008-10-13 18:04:55] phpwnd at gmail dot com

Description:
------------
lastInsertId() always returns "0" after executing a dereferenced native
(non-emulated) prepared statement. Storing the PDOStatement in a
variable _then_ executing it solves that problem, and so does using
emulated prepared statements.

PHP was compiled with --enable-debug --with-pdo-mysql=mysqlnd, I
haven't tested with other combinations yet.

Reproduce code:
---------------
<?php
$db = new
PDO('mysql:dbname=test;unix_socket=/var/run/mysqld/mysqld.sock', 'user',
'password', array(
        PDO::ATTR_EMULATE_PREPARES => false
));

$db->exec('DROP TABLE IF EXISTS test');
$db->exec('CREATE TABLE test (id INT auto_increment, PRIMARY KEY
(id))');

$sql = 'INSERT INTO test (id) VALUES (NULL)';


$db->prepare($sql)->execute();
var_dump($db->lastInsertId());

$stmt = $db->prepare($sql);
$stmt->execute();
var_dump($db->lastInsertId());
?>

Expected result:
----------------
string(1) "1"
string(1) "2"

Actual result:
--------------
string(1) "0"
string(1) "2"


------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=46285&edit=1

Reply via email to