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

MySQLi chuẩn bị báo cáo lỗi báo cáo

Mỗi phương pháp của mysqli có thể bị lỗi. Bạn nên kiểm tra từng giá trị trả về. Nếu thất bại, hãy nghĩ xem liệu có hợp lý khi tiếp tục với một đối tượng không ở trạng thái bạn mong đợi hay không. (Có thể không ở trạng thái "an toàn", nhưng tôi nghĩ đó không phải là vấn đề ở đây.)

Vì chỉ thông báo lỗi cho thao tác cuối cùng được lưu trữ trên mỗi kết nối / câu lệnh, bạn có thể mất thông tin về cái gì đã gây ra lỗi nếu bạn tiếp tục sau khi xảy ra sự cố. Bạn có thể muốn sử dụng thông tin đó để cho phép tập lệnh quyết định có thử lại (chỉ là sự cố tạm thời), thay đổi điều gì đó hoặc cứu trợ hoàn toàn (và báo cáo lỗi). Và nó làm cho việc gỡ lỗi trở nên dễ dàng hơn rất nhiều.

$stmt = $mysqli->prepare("INSERT INTO testtable VALUES (?,?,?)");
// prepare() can fail because of syntax errors, missing privileges, ....
if ( false===$stmt ) {
  // and since all the following operations need a valid/ready statement object
  // it doesn't make sense to go on
  // you might want to use a more sophisticated mechanism than die()
  // but's it's only an example
  die('prepare() failed: ' . htmlspecialchars($mysqli->error));
}

$rc = $stmt->bind_param('iii', $x, $y, $z);
// bind_param() can fail because the number of parameter doesn't match the placeholders in the statement
// or there's a type conflict(?), or ....
if ( false===$rc ) {
  // again execute() is useless if you can't bind the parameters. Bail out somehow.
  die('bind_param() failed: ' . htmlspecialchars($stmt->error));
}

$rc = $stmt->execute();
// execute() can fail for various reasons. And may it be as stupid as someone tripping over the network cable
// 2006 "server gone away" is always an option
if ( false===$rc ) {
  die('execute() failed: ' . htmlspecialchars($stmt->error));
}

$stmt->close();

Chỉ một vài nốt nhạc sáu năm sau ...

Tiện ích mở rộng mysqli hoàn toàn có khả năng báo cáo các hoạt động dẫn đến mã lỗi (mysqli) khác 0 thông qua các ngoại lệ, hãy xem mysqli_driver::$report_mode .
die () thực sự, thực sự thô thiển và tôi sẽ không sử dụng nó ngay cả cho các ví dụ như thế này nữa.
Vì vậy, xin vui lòng chỉ loại bỏ thực tế rằng mỗi và mọi thứ (mysql) hoạt động can thất bại vì một số lý do; ngay cả nếu điều tương tự đã diễn ra tốt đẹp hàng nghìn lần trước đó ....



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để chia đầu ra từ mysqldump thành các tệp nhỏ hơn?

  2. Cardinality trong MySQL là gì?

  3. Tự động mở rộng quy mô với Amazon Aurora Serverless

  4. Làm cách nào để lấy kích thước bảng MySQL cho các bảng trong cơ sở dữ liệu?

  5. Tên bảng động trong hàm thủ tục được lưu trữ