Mysql
 sql >> Database >  >> RDS >> Mysql

pdo lastInsertId restituisce zero(0)

Con PDO_MySQL dobbiamo usare

$DB->setAttribute(PDO::ATTR_EMULATE_PREPARES,TRUE); // there are other ways to set attributes. this is one

in modo da poter eseguire più query come:

$foo = $DB->prepare("SELECT * FROM var_lst;INSERT INTO var_lst (value) VALUES ('durjdn')");

ma purtroppo, così facendo si solleva $DB dalla restituzione dell'ID di inserimento corretto. Dovresti eseguirli separatamente per poter recuperare l'ID di inserimento. Questo restituisce l'ID di inserimento corretto:

$DB->setAttribute(PDO::ATTR_EMULATE_PREPARES,TRUE);
$foo = $DB->prepare("INSERT INTO var_lst (value) VALUES ('durjdn')");
$foo->execute();
echo $DB->lastInsertId();

ma questo non lo farà:

$DB->setAttribute(PDO::ATTR_EMULATE_PREPARES,TRUE);
$foo = $DB->prepare("SELECT * FROM var_lst;INSERT INTO var_lst (value) VALUES ('durjdn')");
$foo->execute();
echo $DB->lastInsertId();

e questo non eseguirà nemmeno le due query:

$DB->setAttribute(PDO::ATTR_EMULATE_PREPARES,FALSE); // When false, prepare() returns an error
$foo = $DB->prepare("SELECT * FROM var_lst;INSERT INTO var_lst (value) VALUES ('durjdn')");
$foo->execute();
echo $DB->lastInsertId();