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

Trong bài đăng này, bạn sẽ học cách sử dụng xử lý ngoại lệ trong PHP. Kể từ PHP 5, chúng ta có thể sử dụng các khối try catch để xử lý lỗi—đây là cách tốt hơn để xử lý các ngoại lệ và kiểm soát luồng ứng dụng của bạn. Trong bài viết này, chúng ta sẽ tìm hiểu những kiến ​​thức cơ bản về xử lý ngoại lệ cùng với một số ví dụ thực tế

Ngoại lệ là gì?

PHP 5 đã giới thiệu một mô hình lỗi mới cho phép bạn ném và bắt các ngoại lệ trong ứng dụng của mình—đây là cách xử lý lỗi tốt hơn so với cách chúng tôi có trong các phiên bản PHP cũ hơn. Tất cả các ngoại lệ là các thể hiện của lớp cơ sở

// code before the try-catch block

36, mà chúng ta có thể mở rộng để giới thiệu các ngoại lệ tùy chỉnh của riêng mình

Điều quan trọng cần lưu ý ở đây là xử lý ngoại lệ khác với xử lý lỗi. Khi xử lý lỗi, chúng ta có thể sử dụng hàm

// code before the try-catch block

37 để đặt chức năng xử lý lỗi tùy chỉnh của mình sao cho bất cứ khi nào một lỗi được kích hoạt, nó sẽ gọi hàm xử lý lỗi tùy chỉnh của chúng ta. Bằng cách đó, bạn có thể kiểm soát lỗi. Tuy nhiên, nói chung, một số loại lỗi nhất định không thể khôi phục và dừng thực thi chương trình.

Mặt khác, các ngoại lệ được mã cố ý ném ra và dự kiến ​​​​rằng chúng sẽ bị bắt tại một số điểm trong ứng dụng của bạn. Vì vậy, chúng tôi có thể nói rằng các ngoại lệ có thể phục hồi được trái ngược với một số lỗi không thể phục hồi. Nếu một ngoại lệ được ném ra bị bắt ở đâu đó trong ứng dụng của bạn, thì việc thực thi chương trình sẽ tiếp tục từ điểm mà ngoại lệ đó bị bắt. Và một ngoại lệ không được bắt gặp ở bất kỳ đâu trong ứng dụng của bạn sẽ dẫn đến lỗi, do đó tạm dừng thực thi chương trình

Luồng điều khiển xử lý ngoại lệ

Hãy tham khảo sơ đồ sau đây cho thấy luồng điều khiển xử lý ngoại lệ chung

Có thể ném và bắt các ngoại lệ bằng cách sử dụng các khối PHP 

// code before the try-catch block

38 và
// code before the try-catch block

39. Bạn chịu trách nhiệm đưa ra các ngoại lệ khi xảy ra điều gì đó không mong đợi. Hãy xem nhanh quy trình xử lý ngoại lệ cơ bản, như được hiển thị trong mã giả sau

1
__
// code before the try-catch block

__
2
 
3
try {
// code before the try-catch block

0
// code before the try-catch block

1
// code before the try-catch block

2
 
// code before the try-catch block

0
// code before the try-catch block

1
// code before the try-catch block

2
// code before the try-catch block

3
// code before the try-catch block

4
 
// code before the try-catch block

6
// code before the try-catch block

7
// code before the try-catch block

8
// code before the try-catch block

9
2
0
2
1
2
2
2
3
2
4
2
5
2
6
 
2
8
2
9

Hầu hết thời gian, khi bạn xử lý các trường hợp ngoại lệ, cuối cùng bạn sẽ sử dụng một mẫu, như được hiển thị trong đoạn mã trên. Bạn cũng có thể sử dụng khối

// code before the try-catch block

40 cùng với khối
// code before the try-catch block

38 và
// code before the try-catch block

39, nhưng chúng ta sẽ quay lại vấn đề đó sau trong bài viết này

Khối

// code before the try-catch block

38 là khối được sử dụng khi bạn nghi ngờ rằng mã của mình có thể tạo ra ngoại lệ. Bạn phải luôn bọc mã như vậy bằng cách sử dụng
// code before the try-catch block

38 và
// code before the try-catch block

39.  

Ném một ngoại lệ

Một ngoại lệ có thể được đưa ra bởi một hàm mà bạn gọi, hoặc bạn có thể sử dụng từ khóa

// code before the try-catch block

46 để đưa ra một ngoại lệ theo cách thủ công. Ví dụ: bạn có thể xác thực một số đầu vào trước khi thực hiện bất kỳ thao tác nào và đưa ra một ngoại lệ nếu dữ liệu không hợp lệ

Điều quan trọng cần lưu ý ở đây là nếu bạn đưa ra một ngoại lệ nhưng bạn chưa xác định khối

// code before the try-catch block

39 được cho là xử lý ngoại lệ đó, nó sẽ dẫn đến một lỗi nghiêm trọng. Vì vậy, bạn cần đảm bảo rằng bạn luôn xác định khối
// code before the try-catch block

39 nếu bạn đang ném ngoại lệ vào ứng dụng của mình

Khi một ngoại lệ được bắt gặp trong khối

// code before the try-catch block

39, đối tượng
// code before the try-catch block

36 chứa thông báo lỗi được đưa ra bằng cách sử dụng từ khóa
// code before the try-catch block

46. Biến
// code before the try-catch block

52 trong ví dụ trên là một thể hiện của lớp
// code before the try-catch block

36, vì vậy nó có quyền truy cập vào tất cả các phương thức của lớp đó. Trong khối này, bạn nên xác định logic xử lý ngoại lệ của riêng mình—chính xác bạn muốn làm gì với lỗi mà bạn gặp phải

Trong phần tiếp theo, chúng ta sẽ đi qua một ví dụ thực tế để hiểu cách xử lý ngoại lệ hoạt động

Một ví dụ thực tế

Trong phần này, chúng ta sẽ xây dựng một ví dụ thực tế để chứng minh việc xử lý ngoại lệ trong PHP

Giả sử rằng bạn đã xây dựng một ứng dụng tải cấu hình ứng dụng từ tệp config. tập tin php. Bây giờ, điều cần thiết là cấu hình. tệp php xuất hiện khi ứng dụng của bạn được khởi động. Do đó, ứng dụng của bạn không thể chạy nếu cấu hình. tập tin php không có mặt. Vì vậy, đây là trường hợp sử dụng hoàn hảo để đưa ra một ngoại lệ và cho người dùng biết rằng họ cần khắc phục sự cố

1
__
 
1
2
try {
3
 
5
// code before the try-catch block

0_______7
// code before the try-catch block

2
 
9
// code before the try-catch block

0
 
// code before the try-catch block

2
3
3
// code before the try-catch block

4
3
5
// code before the try-catch block

6
3
7
// code before the try-catch block

8
3
9
2
0
try {
1
2
2
try {
3
2
4
// code before the try-catch block

9
2
6
try {
7
2
8_______99__
// code before the try-catch block

00
// code before the try-catch block

65_____1___1

Như bạn có thể thấy trong ví dụ trên, chúng tôi đang kiểm tra sự tồn tại của cấu hình. php khi bắt đầu giai đoạn khởi động. Nếu cấu hình. php được tìm thấy, việc thực thi tiếp tục bình thường. Mặt khác, chúng tôi sẽ đưa ra một ngoại lệ nếu cấu hình. tập tin php không tồn tại. Ngoài ra, chúng tôi muốn dừng thực thi nếu có ngoại lệ

Vì vậy, đó là cách bạn có thể sử dụng ngoại lệ trong ứng dụng của mình. Bạn nên đưa ra ngoại lệ cho các trường hợp sử dụng đặc biệt—bạn không nên đưa ra ngoại lệ một cách không cần thiết cho các lỗi chung chung như thông tin xác thực người dùng không hợp lệ, quyền truy cập thư mục không phù hợp, v.v. , mà bạn mong đợi sẽ xảy ra thường xuyên. Chúng được xử lý tốt hơn bằng các thông báo lỗi chung trong quy trình thực thi ứng dụng thông thường

Vì vậy, đó là một ví dụ về xử lý ngoại lệ bằng cách sử dụng lớp

// code before the try-catch block

36 mặc định. Trong phần tiếp theo, chúng ta sẽ xem cách bạn có thể mở rộng lớp
// code before the try-catch block

36 cốt lõi và tạo các ngoại lệ tùy chỉnh của riêng bạn trong ứng dụng của bạn

Cách tạo ngoại lệ tùy chỉnh

Trong phần này, chúng ta sẽ thảo luận cách bạn có thể tạo các ngoại lệ tùy chỉnh trong ứng dụng của mình. Trên thực tế, chúng tôi sẽ mở rộng ví dụ mà chúng tôi vừa thảo luận trong phần trước để chứng minh các ngoại lệ tùy chỉnh

Trong ví dụ trước, chúng tôi đã ném ngoại lệ cấu hình bằng cách sử dụng lớp

// code before the try-catch block

36 mặc định. Điều đó hoàn toàn ổn miễn là bạn chỉ muốn xử lý thông báo lỗi ngoại lệ. Tuy nhiên, đôi khi bạn muốn thực hiện thêm một chút dựa trên loại ngoại lệ đang được ném. Đó là nơi các ngoại lệ tùy chỉnh hữu ích

Hãy xem lại ví dụ trước, như được hiển thị trong đoạn mã sau

1
 
1
2
// code before the try-catch block

07
3
 
// code before the try-catch block

0
try {
// code before the try-catch block

2
 
5
// code before the try-catch block

0
 
// code before the try-catch block

2
 
9
// code before the try-catch block

4
 
// code before the try-catch block

6
3
3
// code before the try-catch block

8
3
5
2
0
// code before the try-catch block

25
2
2
3
9
2
4
try {
1
2
6
try {
3
2
8
 
3
// code before the try-catch block

00
 
5
// code before the try-catch block

02
 
7
 
8
try {
9
// code before the try-catch block

00
// code before the try-catch block

9
// code before the try-catch block

02
try {
7
// code before the try-catch block

04
try {
9
// code before the try-catch block

06
2
5
// code before the try-catch block

08
// code before the try-catch block

03

Đầu tiên, chúng ta đã định nghĩa lớp

// code before the try-catch block

57, mở rộng lớp
// code before the try-catch block

36 mặc định. Bây giờ, nó trở thành lớp ngoại lệ tùy chỉnh của chúng ta và chúng ta có thể sử dụng nó khi muốn ném ngoại lệ
// code before the try-catch block

57 vào ứng dụng của mình

Tiếp theo, chúng tôi đã sử dụng từ khóa

// code before the try-catch block

46 để ném ngoại lệ
// code before the try-catch block

57 nếu cấu hình. tập tin php không tồn tại. Tuy nhiên, sự khác biệt quan trọng nằm ở khối
// code before the try-catch block

39. Như bạn có thể thấy, chúng tôi đã xác định hai khối
// code before the try-catch block

39 và mỗi khối được sử dụng để bắt một loại ngoại lệ khác nhau

Cái đầu tiên bắt ngoại lệ của loại

// code before the try-catch block

57. Vì vậy, nếu một ngoại lệ đang được ném thuộc loại
// code before the try-catch block

57, thì khối này sẽ được thực thi. Nếu loại ngoại lệ không khớp với bất kỳ khối
// code before the try-catch block

39 cụ thể nào, nó sẽ khớp với khối cuối cùng, khối này sẽ bắt tất cả các thông báo ngoại lệ chung

khối cuối cùng

Trong phần này, chúng tôi sẽ hướng dẫn cách bạn có thể sử dụng từ khóa

// code before the try-catch block

40 cùng với các khối
// code before the try-catch block

38 và
// code before the try-catch block

39. Đôi khi, bạn muốn thực thi một đoạn mã bất kể có ném ngoại lệ hay không. Đó là nơi bạn có thể sử dụng khối
// code before the try-catch block

40, vì mã bạn đặt trong khối cuối cùng sẽ luôn được thực thi sau khi thực hiện các khối thử và bắt, bất kể có hay không có ngoại lệ

Hãy cố gắng hiểu nó bằng ví dụ sau

1
__
try {
2
// code before the try-catch block

1
3
 
// code before the try-catch block

0
// code before the try-catch block

1
// code before the try-catch block

2
// code before the try-catch block

3
// code before the try-catch block

0
 
// code before the try-catch block

2
// code before the try-catch block

7
// code before the try-catch block

4
// code before the try-catch block

9
// code before the try-catch block

6
2
1
// code before the try-catch block

8
2
3
2
0
// code before the try-catch block

31
2
2
// code before the try-catch block

33
2
4
2
5

Mã trong ví dụ trên gần như giống nhau, với ngoại lệ duy nhất là chúng tôi đã thêm khối

// code before the try-catch block

40 sau khối
// code before the try-catch block

39. Và, như chúng ta đã thảo luận, mã trong khối này sẽ luôn được thực thi

Các trường hợp sử dụng điển hình cho khối cuối cùng thường liên quan đến dọn dẹp tài nguyên. Ví dụ: nếu bạn đã mở một kết nối cơ sở dữ liệu hoặc một tệp trên đĩa trong khối

// code before the try-catch block

38, bạn có thể thực hiện các tác vụ dọn dẹp như đóng kết nối trong khối
// code before the try-catch block

40 vì nó được đảm bảo chạy

Xử lý ngoại lệ là một kỹ năng mã hóa quan trọng và bạn nên xem xét cách xử lý ngoại lệ trong khi phát triển ứng dụng của mình. Điều này sẽ giúp bạn phát hiện và khôi phục các lỗi không mong muốn trong ứng dụng của mình. Tôi hy vọng rằng bài đăng này sẽ truyền cảm hứng cho bạn để viết mã xử lý lỗi tốt hơn

Phần kết luận

Hôm nay, chúng ta đã thảo luận về chủ đề xử lý ngoại lệ bằng PHP try catch blocks. Trong nửa đầu của bài viết, chúng ta đã thảo luận về các khái niệm cơ bản về ngoại lệ trong PHP và xây dựng một ví dụ thực tế để minh họa cách chúng hoạt động. Cuối cùng, chúng tôi đã khám phá cách bạn có thể tạo các ngoại lệ tùy chỉnh bằng cách mở rộng lớp

// code before the try-catch block

36 cốt lõi

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

Mô tả ¶ . Lưu ý rằng chức năng này chỉ trả về văn bản lỗi từ chức năng MySQL được thực thi gần đây nhất [không bao gồm mysql_error[] và mysql_errno[]], vì vậy nếu bạn muốn sử dụng nó, hãy đảm bảo rằng bạn đã kiểm tra giá trị trước khi gọi một chức năng MySQL khác. use mysql_error[] to retrieve the error text. Note that this function only returns the error text from the most recently executed MySQL function [not including mysql_error[] and mysql_errno[]], so if you want to use it, make sure you check the value before calling another MySQL function.

Làm cách nào để bắt ngoại lệ cơ sở dữ liệu trong PHP?

PHP xử lý lỗi từ khóa . Từ khóa throw được sử dụng để báo hiệu sự xuất hiện của một ngoại lệ PHP. Bộ thực thi PHP sau đó sẽ cố gắng tìm một câu lệnh bắt để xử lý ngoại lệ . Nắm lấy. Khối mã này sẽ chỉ được gọi nếu có ngoại lệ xảy ra trong khối mã thử.

Chúng ta có thể bắt ngoại lệ SQL không?

Lỗi cú pháp trong câu lệnh SQL có thể dẫn đến Ngoại lệ SQL. Khi một ngoại lệ như vậy xảy ra, một đối tượng của lớp SQLException sẽ được chuyển đến khối catch. Bằng cách sử dụng thông tin trong đối tượng SQLException, chúng ta có thể bắt ngoại lệ đó và tiếp tục chương trình .

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

Xử lý lỗi trong PHP rất đơn giản. Thông báo lỗi với tên tệp, số dòng và thông báo mô tả lỗi được gửi tới trình duyệt. .
E_USER_ERROR - Lỗi nghiêm trọng trong thời gian chạy do người dùng tạo. .
E_USER_WARNING - Cảnh báo thời gian chạy không nghiêm trọng do người dùng tạo. .
E_USER_NOTICE - Mặc định

Chủ Đề