Làm cách nào để nhận được thông báo lỗi trong PDO?

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 kết nối PDO của tôi?

Để tìm địa chỉ IP cụm của nhóm Kubernetes, hãy sử dụng lệnh kubectl get pod trên máy cục bộ của bạn, với tùy chọn -o wide . This option will list more information, including the node the pod resides on, and the pod's cluster IP. The IP column will contain the internal cluster IP address for each pod.

Làm cách nào để bắt ngoại lệ PDO trong PHP?

Quy trình .
Để bắt đối tượng PDOException và xử lý lỗi liên quan. Kết thúc cuộc gọi đến hàm tạo PDO trong một khối thử. .
Để truy xuất SQLSTATE được liên kết với đối tượng PDO hoặc PDOStatement, hãy gọi phương thức errorCode trên đối tượng

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

Để nhận được thông báo lỗi, chúng ta phải sử dụng một hàm khác mysqli_error[] để in thông báo lỗi do cơ sở dữ liệu MySQL trả về sau khi thực hiện truy vấn . Đây là cách in thông báo lỗi. tiếng vang mysqli_error[]; .

Phương pháp PDO nào được sử dụng để chuẩn bị một câu lệnh để thực thi?

Chuẩn bị một câu lệnh SQL để được thực thi bởi PDOStatement. phương pháp thực thi[] . Mẫu câu lệnh có thể chứa 0 hoặc nhiều tên [. tên] hoặc dấu chấm hỏi [?] đánh dấu tham số mà giá trị thực sẽ được thay thế khi câu lệnh được thực thi.

Chủ Đề