Đó là vì $pdo->errorInfo()
đề cập đến câu lệnh cuối cùng đã được thực thi thành công. Kể từ khi $sql->execute()
trả về false, sau đó nó không thể tham chiếu đến câu lệnh đó (hoặc không có gì hoặc đến truy vấn trước đó).
Tại sao $sql->execute()
trả về false, tôi không biết ... có vấn đề với $params
của bạn mảng hoặc với kết nối cơ sở dữ liệu của bạn.
Lưu ý:Hướng dẫn sử dụng PHP ( http://php.net/manual/en/pdo .errorinfo.php
) không xác định chính xác "hoạt động cuối cùng trên xử lý cơ sở dữ liệu" nghĩa là gì, nhưng nếu có vấn đề với các tham số ràng buộc, lỗi đó sẽ xảy ra bên trong PDO và không có bất kỳ tương tác nào với cơ sở dữ liệu. Có thể nói rằng nếu $pdo->execute()
trả về true
, $pdo->errorInfo()
là hợp lệ. If $pdo->execute()
trả về false
, hành vi của $pdo->errorInfo()
không rõ ràng rõ ràng từ tài liệu. Nếu tôi nhớ lại chính xác từ trải nghiệm của mình, hãy thực thi trả về true
, ngay cả khi MySQL trả về lỗi, trả về false
nếu không có hoạt động nào được thực hiện. Vì tài liệu không cụ thể, nó có thể là trình điều khiển db cụ thể.
Câu trả lời này phản ánh kinh nghiệm thực tế kể từ khi nó được viết vào tháng 9 năm 2012. Như người dùng đã chỉ ra, tài liệu không khẳng định lại rõ ràng cách giải thích này. Nó cũng có thể chỉ phản ánh việc triển khai trình điều khiển cơ sở dữ liệu cụ thể, nhưng phải luôn đúng rằng if $pdo->execute()
trả về true
, $pdo->errorInfo()
là hợp lệ.
Bạn cũng có thể muốn đặt PDO ::ERRMODE_EXCEPTION trong trình tự kết nối của bạn. Xử lý ngoại lệ khiến việc kiểm tra và truy vấn lỗi không cần thiết.
$dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );