sql >> Databasteknik >  >> RDS >> Mysql

pdo lastInsertId returnerar noll(0)

Med PDO_MySQL måste vi använda

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

så att vi kan köra flera frågor som:

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

men tyvärr befriar det $DB från att returnera korrekt infognings-id. Du skulle behöva köra dem separat för att kunna hämta insert-id:t. Detta returnerar korrekt infognings-id:

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

men detta kommer inte:

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

och detta kommer inte ens att köra de två frågorna:

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


  1. Varför tillåter MySQL grupp efter frågor UTAN aggregatfunktioner?

  2. Tabellkommentarlängd i MySQL

  3. Hitta nästa tillgängliga ID i MySQL

  4. Att behålla data plus indexdata i minnet - InnoDB vs. MyISAM