Bắt ngoại lệ mysqli

PHP try and catch là các khối có tính năng xử lý ngoại lệ, chứa mã xử lý ngoại lệ. Họ đóng một vai trò quan trọng trong việc xử lý ngoại lệ. Có một từ khóa quan trọng hơn được sử dụng với khối try-catch là ném. Ném là một từ khóa được sử dụng để ném một ngoại lệ

Mỗi khối thử phải có ít nhất một khối bắt. Mặt khác, một khối try cũng có thể có nhiều khối catch để xử lý các loại ngoại lệ khác nhau.

cú pháp

Cú pháp sau đây được sử dụng trong xử lý ngoại lệ để xử lý lỗi thời gian chạy -

Hãy cùng tìm hiểu về thử-ném-bắt chi tiết hơn

Khối thử chứa mã có thể chứa ngoại lệ. Một ngoại lệ được đưa ra trong khối thử trong thời gian chạy bị bắt bởi khối bắt. Do đó, mỗi khối thử phải có ít nhất một khối bắt. Nó bao gồm khối mã mà ngoại lệ có thể xảy ra

Những điểm sau đây cần được lưu ý về việc thử

  • Khối thử phải được theo sau bởi khối bắt hoặc khối cuối cùng
  • Một khối thử phải có ít nhất một khối bắt
  • Có thể có nhiều khối bắt với một khối thử

Khối catch bắt ngoại lệ được đưa ra trong khối try. Nó chứa mã để bắt ngoại lệ, được ném bằng từ khóa ném trong khối thử. Khối catch thực thi khi ném một ngoại lệ cụ thể. PHP tìm khối catch phù hợp và gán đối tượng ngoại lệ cho một biến

Các điểm cần lưu ý sau đây về việc đánh bắt

  • Có thể có nhiều hơn một khối bắt với một lần thử
  • Ngoại lệ ném ra được bắt và giải quyết bằng một hoặc nhiều lần bắt
  • Khối catch luôn được sử dụng với khối try. Nó không thể được sử dụng một mình
  • Nó xuất hiện ngay sau khối thử

ném

Nó là một từ khóa, được sử dụng để ném một ngoại lệ. Lưu ý rằng một lần ném ít nhất có một "khối bắt" để bắt ngoại lệ

Nó liệt kê các ngoại lệ do chức năng đưa ra, mà chính chức năng đó không thể xử lý được

cuối cùng

Nó là một khối chứa mã thiết yếu của chương trình để thực thi. Khối cuối cùng cũng được sử dụng cho hoạt động dọn dẹp trong PHP. Nó tương tự như khối catch, dùng để xử lý ngoại lệ. Sự khác biệt duy nhất là nó luôn thực thi cho dù một ngoại lệ có được xử lý hay không

Khối cuối cùng có thể được chỉ định sau hoặc thay cho khối bắt. Nó luôn thực thi ngay sau khối try and catch cho dù có ném ngoại lệ hay không và trước khi khởi động lại quá trình thực thi bình thường. Nó hữu ích trong các trường hợp sau - Đóng kết nối cơ sở dữ liệu, luồng

ví dụ 1

Hãy lấy một ví dụ để giải thích quy trình phổ biến của ném và bắt thử cũng như chặn cuối cùng

đầu ra

Exception Message: Value must be less than 1
It is finally block, which always executes.

ví dụ 2

đầu ra

Trong kết quả bên dưới, bạn có thể thấy rằng khi một số lẻ được thông qua, một thông báo ngoại lệ sẽ được hiển thị. Mặt khác, khi một số chẵn được chuyển, một thông báo khác sẽ được hiển thị

Output for ODD Number 
Exception Message: Passed number is an ODD Number
It is finally block, which always executes.

Output for EVEN Number
If you see this text, the passed value is an EVEN Number
It is finally block, which always executes.

ví dụ 2. Ngoại lệ tùy chỉnh và nhiều câu lệnh bắt

Trong ví dụ dưới đây, chúng tôi sẽ tạo một lớp ngoại lệ tùy chỉnh mở rộng lớp Ngoại lệ. Ở đây, chúng tôi cũng sẽ sử dụng nhiều khối bắt với một khối thử

Trong PHP8. 1, hành vi xử lý lỗi mặc định của tiện ích mở rộng MySQLi đã thay đổi từ lỗi im lặng thành ném Ngoại lệ đối với lỗi

Trước PHP 8. 1, chế độ báo cáo lỗi mặc định trong MySQLi là tắt các lỗi và thường dẫn đến mã không tuân theo xử lý Ngoại lệ/Lỗi thích hợp. Từ PHP8. 1 trở lên, chế độ báo cáo lỗi mặc định là đưa ra Ngoại lệ đối với các lỗi

Chế độ lỗi mặc định của MySQLi được thay đổi từ

$mysqli = new mysqli["localhost", "non-existing-user", "", ""];
2 thành
$mysqli = new mysqli["localhost", "non-existing-user", "", ""];
0

- MYSQLI_REPORT_OFF
+ MYSQLI_REPORT_ERROR|MYSQLI_REPORT_STRICT

Thay đổi này tương tự như việc tiện ích mở rộng PDO thay đổi chế độ báo cáo lỗi thành Ngoại lệ trong PHP 8. 0

Trước PHP 8. 1, lỗi trong phần mở rộng, cơ sở dữ liệu, truy vấn hoặc kết nối cơ sở dữ liệu đã trả về

$mysqli = new mysqli["localhost", "non-existing-user", "", ""];
1 và đưa ra cảnh báo PHP

$mysqli = new mysqli["localhost", "non-existing-user", "", ""];
Warning: mysqli::__construct[]: [HY000/2002]: No connection could be made because the target machine actively
refused it in .. on line ...

Từ PHP8. 1 trở lên, chế độ lỗi mặc định được đặt thành

$mysqli = new mysqli["localhost", "non-existing-user", "", ""];
0

$mysqli = new mysqli["localhost", "non-existing-user", "", ""];
Fatal error: Uncaught mysqli_sql_exception: Connection refused in ...:...

Tác động tương thích ngược

Đây là một thay đổi lớn vì giá trị mặc định khác trong PHP 8. 1

Để tương thích trên các phiên bản PHP trước PHP 8. 1, có thể đặt chế độ xử lý lỗi một cách rõ ràng bằng hàm

$mysqli = new mysqli["localhost", "non-existing-user", "", ""];
3 trước khi thực hiện kết nối MySQLi đầu tiên. Cũng có thể khởi tạo phiên bản
$mysqli = new mysqli["localhost", "non-existing-user", "", ""];
4 và đặt giá trị báo cáo lỗi

Lưu ý rằng lớp

$mysqli = new mysqli["localhost", "non-existing-user", "", ""];
4 có mẫu đơn trạng thái, có nghĩa là khi giá trị báo cáo lỗi được đặt, nó sẽ ảnh hưởng đến tất cả các kết nối MySQLi trong suốt yêu cầu trừ khi giá trị này sau đó được ghi đè trong một lệnh gọi khác. Điều tương tự cũng áp dụng cho hàm
$mysqli = new mysqli["localhost", "non-existing-user", "", ""];
3

Định cấu hình PHP 8. 1 hành vi trong tất cả các phiên bản PHP

Output for ODD Number 
Exception Message: Passed number is an ODD Number
It is finally block, which always executes.

Output for EVEN Number
If you see this text, the passed value is an EVEN Number
It is finally block, which always executes.
4

hoặc là

Output for ODD Number 
Exception Message: Passed number is an ODD Number
It is finally block, which always executes.

Output for EVEN Number
If you see this text, the passed value is an EVEN Number
It is finally block, which always executes.
5

Cấu hình PHP db_link->error để nhận thông báo lỗi cuối cùng. Đối với tất cả các lỗi, hãy sử dụng $this->db_link->error_list.

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

Bắt tất cả ngoại lệ PHP . cố gắng { //. }type-hinting the global exception object, which is indicated by adding a backslash in front: try { // .. }

Chủ Đề