Đôi khi mã PDO của bạn tạo ra lỗi như Call to a member function execute()
hoặc tương tự. Hoặc thậm chí không có bất kỳ lỗi nào nhưng truy vấn không hoạt động giống nhau. Có nghĩa là truy vấn của bạn không thực thi được.
Mỗi khi truy vấn không thành công, MySQL có thông báo lỗi giải thích lý do . Thật không may, theo mặc định, những lỗi như vậy không được chuyển sang PHP và tất cả những gì bạn có là một khoảng lặng hoặc một thông báo lỗi khó hiểu được đề cập ở trên. Do đó, việc cấu hình PHP và PDO để báo lỗi MySQL cho bạn là rất quan trọng. Và một khi bạn nhận được thông báo lỗi, việc khắc phục sự cố sẽ trở nên vô ích.
Để có được thông tin chi tiết về sự cố, hãy đặt dòng sau vào mã của bạn ngay sau khi kết nối
$dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
(trong đó $dbh
là tên biến phiên bản PDO của bạn) hoặc - tốt hơn - thêm thông số này làm tùy chọn kết nối . Sau đó, tất cả các lỗi cơ sở dữ liệu sẽ được chuyển thành các ngoại lệ PDO, nếu để nguyên, sẽ hoạt động giống như các lỗi PHP thông thường.
Có một cơ hội rất nhỏ là trong trường hợp xảy ra một số lỗi cụ thể, một ngoại lệ sẽ không được đưa ra. Nếu query()
của bạn / prepare()
hoặc execute()
cuộc gọi trả về false
nhưng không có ngoại lệ, hãy kiểm tra PDO::errorInfo()
như thế này,
trigger_error("PDO errorInfo: ".$dbh->errorInfo());
Sau khi nhận được thông báo lỗi, bạn phải đọc và hiểu nó. Nghe có vẻ quá rõ ràng, nhưng người học thường bỏ qua ý nghĩa của thông báo lỗi. Tuy nhiên, hầu hết thời gian nó giải thích vấn đề khá đơn giản:
- Giả sử, nếu nó nói rằng một bảng cụ thể không tồn tại, bạn phải kiểm tra chính tả, lỗi chính tả, viết hoa chữ cái. Ngoài ra, bạn phải đảm bảo rằng tập lệnh PHP của bạn kết nối với một cơ sở dữ liệu chính xác
- Hoặc, nếu nó cho biết có lỗi trong cú pháp SQL, thì bạn phải kiểm tra SQL của mình. Và điểm vấn đề nằm ngay trước phần truy vấn được trích dẫn trong thông báo lỗi.
Bạn cũng phải tin tưởng thông báo lỗi. Nếu nó cho biết rằng số lượng mã thông báo không khớp với số lượng biến bị ràng buộc thì nó là vì thế. Tương tự đối với các bảng hoặc cột vắng mặt. Đưa ra sự lựa chọn, cho dù đó là lỗi của bạn hay thông báo lỗi là sai, hãy luôn bám sát điều trước. Một lần nữa nghe có vẻ trịch thượng, nhưng hàng trăm câu hỏi trên chính trang web này chứng minh lời khuyên này vô cùng hữu ích.
Lưu ý rằng để xem lỗi PDO, bạn phải có khả năng xem lỗi PHP nói chung. Để làm như vậy, bạn phải định cấu hình PHP tùy thuộc vào môi trường trang web:
-
trên một sự phát triển máy chủ rất hữu ích nếu có lỗi ngay trên màn hình, mà lỗi hiển thị phải được bật:
error_reporting(E_ALL); ini_set('display_errors',1);
-
trong khi trực tiếp trang web, tất cả các lỗi phải được ghi nhật ký, nhưng không bao giờ được hiển thị cho khách hàng. Đối với điều này, hãy định cấu hình PHP theo cách này:
error_reporting(E_ALL); ini_set('display_errors', 0); ini_set('log_errors', 1);
Lưu ý rằng error_reporting
nên được đặt thành E_ALL
mọi lúc.
Cũng xin lưu ý rằng mặc dù có sự nhầm lẫn phổ biến, nhưng không phải sử dụng phương pháp try-catch để báo cáo lỗi . PHP sẽ báo cho bạn các lỗi PDO rồi, và theo một cách tốt hơn. Một ngoại lệ không cần thiết là rất tốt cho việc phát triển, nhưng nếu bạn muốn hiển thị trang lỗi tùy chỉnh, vẫn không sử dụng try catch cho trường hợp này, mà chỉ cần đặt trình xử lý lỗi tùy chỉnh . Tóm lại, bạn không cần phải coi lỗi PDO là một cái gì đó đặc biệt mà hãy coi chúng như bất kỳ lỗi nào khác trong mã của bạn.
Tái bút
Đôi khi không có lỗi nhưng cũng không có kết quả. Khi đó, điều đó có nghĩa là không có dữ liệu nào phù hợp với tiêu chí của bạn . Vì vậy, bạn phải thừa nhận sự thật này, ngay cả khi bạn có thể tuyên bố rằng dữ liệu và tiêu chí đều đúng. Họ không phải. Bạn phải kiểm tra lại chúng. Câu trả lời ngắn gọn của tôi sẽ giúp bạn xác định chính xác vấn đề đối sánh, Gặp sự cố với các hàng khớp trong cơ sở dữ liệu sử dụng PDO
. Chỉ cần làm theo hướng dẫn này và hướng dẫn được liên kết theo từng bước và vấn đề của bạn đã được giải quyết hoặc có câu hỏi trả lời được cho Stack Overflow.