Mysql
 sql >> Baza danych >  >> RDS >> Mysql

pdo lastInsertId zwraca zero (0)

W przypadku PDO_MySQL musimy użyć

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

dzięki czemu możemy uruchomić wiele zapytań, takich jak:

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

ale niestety, zrobienie tego zwalnia $DB z zwracania poprawnego identyfikatora wstawiania. Musiałbyś uruchomić je osobno, aby móc pobrać identyfikator wstawiania. Zwraca poprawny identyfikator wstawiania:

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

ale to nie spowoduje:

$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 nawet nie uruchomi dwóch zapytań:

$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. użyj wartości kolumny jako nazwy kolumny mysql

  2. Czy jest jakiś powód, aby nadal używać wielkości węża do tabel i kolumn bazy danych?

  3. Jak Kupony WooCommerce są przechowywane w bazie danych?

  4. Samouczek MySQL — zarządzanie dziennikami serwera MySQL:obracanie, kompresowanie, przechowywanie i usuwanie

  5. Zmień kolejność wierszy w tabeli MySQL