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

pdo lastInsertId returnerer nul(0)

Med PDO_MySQL skal vi bruge

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

så vi kan køre flere forespørgsler som:

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

men desværre fritager det $DB fra at returnere det korrekte indsættelses-id. Du skal køre dem separat for at kunne hente indsættelses-id'et. Dette returnerer det korrekte indsættelses-id:

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

men dette vil ikke:

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

og dette vil ikke engang køre de to forespørgsler:

$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. Sådan fungerer CHAR()-funktionen i SQL Server (T-SQL)

  2. Er der noget galt med joins, der ikke bruger JOIN nøgleordet i SQL eller MySQL?

  3. Mærkelig SQL-undtagelse:Kolonne blev ikke fundet

  4. Effektiv sammenføjning over intervalområder i SQL