Làm cách nào để lấy mã lỗi MySQL trong PHP?

use PDOException;

try {
  $sth = $dbh->prepare['...'];
  $sth->execute[];
} catch [PDOExcepton $e] {
  var_dump[$e->getCode[]];
  var_dump[$e->getMessage[]];
  var_dump[$e->errorInfo];
}
2 được trả về sẽ trả lại chuỗi mã SQLSTATE gồm 5 ký tự. Điều này được định nghĩa là một phần của tiêu chuẩn SQL và có nghĩa là chung trên các cơ sở dữ liệu. Để biết thêm thông tin về mã này. https. // vi. sách wiki. org/wiki/Structured_Query_Language/SQLSTATE

_______ 13 được trả về là một chuỗi được tạo bởi PDO có định dạng là

SQLSTATE[XXXXX]: DESCRIPTION: YYYY MESSAGE

Trong đó

use PDOException;

try {
  $sth = $dbh->prepare['...'];
  $sth->execute[];
} catch [PDOExcepton $e] {
  var_dump[$e->getCode[]];
  var_dump[$e->getMessage[]];
  var_dump[$e->errorInfo];
}
4 là mã SQLSTATE,
use PDOException;

try {
  $sth = $dbh->prepare['...'];
  $sth->execute[];
} catch [PDOExcepton $e] {
  var_dump[$e->getCode[]];
  var_dump[$e->getMessage[]];
  var_dump[$e->errorInfo];
}
5 là mô tả do PHP cung cấp như
use PDOException;

try {
  $sth = $dbh->prepare['...'];
  $sth->execute[];
} catch [PDOExcepton $e] {
  var_dump[$e->getCode[]];
  var_dump[$e->getMessage[]];
  var_dump[$e->errorInfo];
}
6 hoặc
use PDOException;

try {
  $sth = $dbh->prepare['...'];
  $sth->execute[];
} catch [PDOExcepton $e] {
  var_dump[$e->getCode[]];
  var_dump[$e->getMessage[]];
  var_dump[$e->errorInfo];
}
0,
use PDOException;

try {
  $sth = $dbh->prepare['...'];
  $sth->execute[];
} catch [PDOExcepton $e] {
  var_dump[$e->getCode[]];
  var_dump[$e->getMessage[]];
  var_dump[$e->errorInfo];
}
1 là mã cụ thể của trình điều khiển và cuối cùng,
use PDOException;

try {
  $sth = $dbh->prepare['...'];
  $sth->execute[];
} catch [PDOExcepton $e] {
  var_dump[$e->getCode[]];
  var_dump[$e->getMessage[]];
  var_dump[$e->errorInfo];
}
2 là thông báo trình điều khiển trả về

Các mã cụ thể của trình điều khiển thường cụ thể hơn mã SQLSTATE, vì vậy bạn có thể khớp mẫu trên mã cụ thể của trình điều khiển để tìm hiểu các lỗi cụ thể hơn. Ví dụ: đây là danh sách mã lỗi trình điều khiển MySQL và cách chúng khớp với mã SQLSTATE. https. // nhà phát triển. mysql. com/doc/refman/en/error-messages-server. html và đây là cái dành cho MariaDB. https. // mariadb. com/kb/en/mariadb/mariadb-error-codes/

Có thể tạo mã SQLSTATE tùy chỉnh để sử dụng cho các lỗi dành riêng cho lược đồ mà ứng dụng của bạn sẽ xử lý. Trong MySQL, bạn nên sử dụng cú pháp

use PDOException;

try {
  $sth = $dbh->prepare['...'];
  $sth->execute[];
} catch [PDOExcepton $e] {
  var_dump[$e->getCode[]];
  var_dump[$e->getMessage[]];
  var_dump[$e->errorInfo];
}
3 để đặt tên con người có thể đọc được cho mã lỗi tùy chỉnh của bạn. Mã lỗi tùy chỉnh nên tránh xung đột với mã lỗi hiện có. Đặc tả SQL tiêu chuẩn nói rằng các lớp bắt đầu bằng 0, 1, 2, 3, 4, A, B, C, D, E, F và G được dành riêng cho các lớp được xác định theo tiêu chuẩn, trong khi các lớp khác dành riêng cho nhà cung cấp. Nó cũng nói rằng, khi lớp được xác định theo tiêu chuẩn, các lớp con bắt đầu bằng các ký tự đó [ngoại trừ '000'] là các lớp con được xác định theo tiêu chuẩn, trong khi các lớp con khác do nhà cung cấp xác định. Vì vậy, tùy thuộc vào cơ sở dữ liệu của bạn, hãy tìm một phạm vi hiện không được sử dụng và không có khả năng được sử dụng trong tương lai. Đây là một ví dụ sử dụng.
use PDOException;

try {
  $sth = $dbh->prepare['...'];
  $sth->execute[];
} catch [PDOExcepton $e] {
  var_dump[$e->getCode[]];
  var_dump[$e->getMessage[]];
  var_dump[$e->errorInfo];
}
4 đối với các lỗi ứng dụng chung, sau đó bắt đầu từ
use PDOException;

try {
  $sth = $dbh->prepare['...'];
  $sth->execute[];
} catch [PDOExcepton $e] {
  var_dump[$e->getCode[]];
  var_dump[$e->getMessage[]];
  var_dump[$e->errorInfo];
}
5 đối với các lỗi cụ thể

Tôi không tìm thấy tài liệu hay về loại mô tả do PHP cung cấp nào có sẵn. Bạn có thể sử dụng nó như một loại mô tả tóm tắt về lỗi. Tuy nhiên, bạn phải sử dụng regex để trích xuất nó từ chuỗi thông báo vì nó không được cung cấp riêng biệt bằng các phương tiện khác

Khi bạn sử dụng trình kích hoạt cơ sở dữ liệu để thực thi các ràng buộc, bạn có thể sẽ sử dụng mã SQLSTATE của

use PDOException;

try {
  $sth = $dbh->prepare['...'];
  $sth->execute[];
} catch [PDOExcepton $e] {
  var_dump[$e->getCode[]];
  var_dump[$e->getMessage[]];
  var_dump[$e->errorInfo];
}
6, bạn có thể khớp mẫu trên
use PDOException;

try {
  $sth = $dbh->prepare['...'];
  $sth->execute[];
} catch [PDOExcepton $e] {
  var_dump[$e->getCode[]];
  var_dump[$e->getMessage[]];
  var_dump[$e->errorInfo];
}
6 để biết liệu đó có phải là lỗi trình kích hoạt hay không

Để thực hiện khớp mẫu dễ dàng, thay vì sử dụng

use PDOException;

try {
  $sth = $dbh->prepare['...'];
  $sth->execute[];
} catch [PDOExcepton $e] {
  var_dump[$e->getCode[]];
  var_dump[$e->getMessage[]];
  var_dump[$e->errorInfo];
}
3 hoặc
use PDOException;

try {
  $sth = $dbh->prepare['...'];
  $sth->execute[];
} catch [PDOExcepton $e] {
  var_dump[$e->getCode[]];
  var_dump[$e->getMessage[]];
  var_dump[$e->errorInfo];
}
2, bạn nên sử dụng mảng
SQLSTATE[XXXXX]: DESCRIPTION: YYYY MESSAGE
0. Điều này cung cấp mã SQLSTATE [vẫn ở dạng chuỗi], mã cụ thể của trình điều khiển [trong các thử nghiệm MySQL của tôi, loại là số nguyên] và thông báo cụ thể của trình điều khiển. Nếu bạn thực hiện khớp mẫu trên mã SQLSTATE, cơ sở mã của bạn sẽ linh hoạt hơn một chút so với khớp mẫu trên mã cụ thể của trình điều khiển

Dưới đây là một ví dụ về khớp mẫu với các lỗi PDO. Đảm bảo đọc hướng dẫn sử dụng cơ sở dữ liệu của bạn và biết loại lỗi nào bạn quan tâm. Lưu ý rằng trong PHP có thể so sánh các chuỗi và số nguyên cho bằng nhau

use PDOException;

try {
  $sth = $dbh->prepare['...'];
  $sth->execute[];
} catch [PDOExcepton $e] {
  var_dump[$e->getCode[]];
  var_dump[$e->getMessage[]];
  var_dump[$e->errorInfo];
}
0

Nếu đoạn mã trên tồn tại trong một số mô hình, thì bạn có thể vẽ lại và bọc ngoại lệ trong một ngoại lệ dành riêng cho mô hình hoặc xử lý chính xác ngoại lệ đó

Nếu bạn đang sử dụng ORM bao bọc PDOException, bạn sẽ luôn có thể lấy nó bằng cách sử dụng

SQLSTATE[XXXXX]: DESCRIPTION: YYYY MESSAGE
1

Xử lý các ngoại lệ PDO đúng cách, có thể cho phép truyền lỗi rõ ràng từ cơ sở dữ liệu sang giao diện người dùng của ứng dụng web, vì điều này cho phép bạn giữ các ràng buộc đối với dữ liệu nơi dữ liệu tồn tại và được quản lý cuối cùng. Sau đó, chúng tôi tránh phải lặp lại logic xác thực từ cơ sở dữ liệu sang ứng dụng

Tuy nhiên, nó thậm chí có thể sạch hơn nếu lược đồ và các ràng buộc trên dữ liệu là giao diện thường được hiểu được nhập bởi giao diện người dùng, phụ trợ và cơ sở dữ liệu, đồng thời mã xác thực và lược đồ cơ sở dữ liệu cũng như các hoạt động của mô hình cơ sở dữ liệu có thể được tạo tự động từ lược đồ chung. [Có lẽ Lược đồ JSON hoặc lược đồ. org hoặc PostgREST có thể giải cứu chúng ta khỏi địa ngục CRUD không?]

Làm cách nào để kiểm tra nhật ký lỗi MySQL trong PHP?

Làm cách nào để xem lỗi ghi nhật ký PHP? .
Mở. htaccess và chèn đoạn mã sau. bật php_flag log_errors. php_value error_reporting 32767. .
Tạo một tệp có tiêu đề error_log. txt trong thư mục public_html
lưu và đóng tập tin
Tất cả các bản ghi lỗi PHP sẽ được báo cáo trong error_log. tập tin txt

Làm cách nào để kiểm tra lỗi SQL trong PHP?

Một dòng mã hữu ích cho bạn sẽ là. $sql = "Câu lệnh SQL của bạn ở đây"; . SQL. $sql - Lỗi. ". mysqli_error[$this->db_link], E_USER_ERROR];

Làm cách nào để nhận lỗi SQL trong MySQL?

Câu lệnh SHOW COUNT[*] ERRORS hiển thị số lỗi. Bạn cũng có thể lấy số này từ biến error_count. HIỂN THỊ ĐẾM[*] LỖI; . SHOW ERRORS and error_count apply only to errors, not warnings or notes.

Làm cách nào để xử lý lỗi SQL trong PHP?

Theo mặc định, PHP gửi nhật ký lỗi tới hệ thống ghi nhật ký của máy chủ hoặc tệp, tùy thuộc vào cách đặt cấu hình error_log trong php. tập tin ini. Bằng cách sử dụng hàm error_log[], bạn có thể gửi nhật ký lỗi tới một tệp cụ thể hoặc một đích đến từ xa .

Chủ Đề