Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

pdo lastInsertId mengembalikan nol(0)

Dengan PDO_MySQL kita harus menggunakan

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

sehingga kami dapat menjalankan beberapa kueri seperti:

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

tapi sayangnya, hal itu membebaskan $DB dari mengembalikan id sisipan yang benar. Anda harus menjalankannya secara terpisah untuk dapat mengambil id sisipan. Ini mengembalikan id sisipan yang benar:

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

tapi ini tidak akan:

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

dan ini bahkan tidak akan menjalankan dua kueri:

$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. Cara Mengelompokkan Penyeimbang Beban ProxySQL Anda

  2. SQLSTATE[HY000]:Kesalahan umum:1835 Paket komunikasi yang salah di LARAVEL

  3. MySQL - bagaimana kode pos pad depan dengan 0?

  4. Mengintegrasikan MySQL dengan Python di Windows

  5. mySql menyalin baris ke tabel yang sama dengan nilai kunci diubah (tidak menimpa yang sudah ada)