Mysql
 sql >> база данни >  >> RDS >> Mysql

pdo lastInsertId връща нула (0)

С PDO_MySQL трябва да използваме

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

така че можем да изпълняваме множество заявки като:

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

но за съжаление, това освобождава $DB от връщането на правилния идентификатор за вмъкване. Ще трябва да ги стартирате отделно, за да можете да извлечете идентификатора за вмъкване. Това връща правилния идентификатор за вмъкване:

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

но това няма да:

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

и това дори няма да изпълни двете заявки:

$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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. АКТУАЛИЗИРАНЕ НА MySQL:Топ 5 съвета за T-SQL разработчици

  2. MySQL двоен главен

  3. Как да тествате дали Ci успешно е вмъкнал данни

  4. Отпадането на таблицата кара MySQL да виси

  5. Не мога да се свържа с MySQL сървър на 'localhost' (10061) след инсталиране