Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

pdo lastInsertId trả về không (0)

Với PDO_MySQL, chúng ta phải sử dụng

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

để chúng tôi có thể chạy nhiều truy vấn như:

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

nhưng thật đáng buồn, làm như vậy sẽ khiến $ DB không trả lại đúng id chèn. Bạn sẽ phải chạy chúng một cách riêng biệt để có thể truy xuất id chèn. Điều này trả về id chèn chính xác:

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

nhưng điều này sẽ không:

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

và điều này thậm chí sẽ không chạy hai truy vấn:

$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. Các hàm do người dùng MySQL xác định

  2. mysql là mảng trong nhiều cột

  3. MySQL chọn tổng với các giá trị nhóm theo và trống

  4. SQL Division sử dụng 'không tồn tại' trong mysql

  5. MySQL thêm cột nếu không tồn tại