sql >> Databáze >  >> RDS >> Mysql

pdo lastInsertId vrací nulu (0)

S PDO_MySQL musíme použít

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

abychom mohli spustit více dotazů jako:

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

ale bohužel to ulehčí $DB od vracení správného ID vložky. Museli byste je spustit samostatně, abyste mohli získat ID vložení. Tím se vrátí správné ID vložení:

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

ale to nebude:

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

a to ani nespustí dva dotazy:

$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. MariaDB CONNECTION_ID() Vysvětleno

  2. java.lang.IllegalArgumentException:sloupec '_id' neexistuje

  3. Konfigurace vyhrazené sítě pro komunikaci skupiny dostupnosti

  4. Připojení k MySQL pomocí Pythonu