Mysql
 sql >> Base de données >  >> RDS >> Mysql

pdo lastInsertId renvoie zéro (0)

Avec PDO_MySQL nous devons utiliser

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

afin que nous puissions exécuter plusieurs requêtes telles que :

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

mais malheureusement, cela évite à $DB de renvoyer le bon identifiant d'insertion. Vous devrez les exécuter séparément pour pouvoir récupérer l'identifiant d'insertion. Cela renvoie l'identifiant d'insertion correct :

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

mais ce ne sera pas :

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

et cela n'exécutera même pas les deux requêtes :

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