Mysql
 sql >> Datenbank >  >> RDS >> Mysql

pdo lastInsertId gibt Null (0) zurück

Bei PDO_MySQL müssen wir

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

damit wir mehrere Abfragen ausführen können wie:

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

aber leider entlastet dies die $DB davon, die richtige Insert-ID zurückzugeben. Sie müssten sie separat ausführen, um die Insert-ID abrufen zu können. Dies gibt die richtige Insert-ID zurück:

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

aber das wird nicht:

$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();

und dies wird nicht einmal die beiden Abfragen ausführen:

$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();