Php bắt lỗi sql

Lưu ý nó đẹp như thế nào. Bất cứ khi nào qq bị lỗi, chúng tôi gtfo với các lỗi của chúng tôi. Và bạn cũng có thể lưu ý rằng bây giờ chúng ta không cần lưu trữ trạng thái của các truy vấn bằng văn bản vào một biến

try {
    mysql_catchquery('CREATE TEMPORARY TABLE a (ID int(6))');
    mysql_catchquery('insert into a values(666),(418),(93)');
    mysql_catchquery('insert into b(ID, name) select a.ID, c.name from a join c on a.ID=c.ID');
    $result=mysql_catchquery('select * from d where ID=7777777');
    while ($tmp=mysql_fetch_assoc($result)) { .. }
} catch (Exception $e) {
    echo $e->getMessage();
}
2 để xác minh, bởi vì hàm của chúng ta hiện đã tự xử lý nó. Và giống như cách nó xử lý các lựa chọn, nó chỉ gán kết quả cho một biến giống như chức năng bình thường, nhưng vẫn xử lý các lỗi bên trong chính nó

Cũng xin lưu ý, chúng tôi không cần hiển thị các lỗi thực tế vì chúng có rủi ro bảo mật rất lớn, đặc biệt là với tiện ích mở rộng đã lỗi thời này. Đó là lý do tại sao mặc định của chúng tôi sẽ ổn trong hầu hết thời gian. Tuy nhiên, nếu chúng tôi muốn thông báo cho người dùng về một số lỗi truy vấn cụ thể, chúng tôi luôn có thể chuyển tham số thứ hai để hiển thị thông báo lỗi tùy chỉnh của mình

Khi phiên bản PHP 5 được phát hành, nó đã tích hợp một mô hình tích hợp để bắt lỗi và ngoại lệ. Xử lý lỗi trong PHP với khối try catch gần giống như xử lý lỗi trong các ngôn ngữ lập trình khác

Khi ném một ngoại lệ PHP, bộ thực thi PHP sẽ tìm một câu lệnh bắt có thể xử lý loại ngoại lệ đó. Nó sẽ tiếp tục kiểm tra các phương thức gọi lên dấu vết ngăn xếp cho đến khi tìm thấy câu lệnh bắt. Nếu không tìm thấy, ngoại lệ sẽ được trao cho trình xử lý ngoại lệ toàn cầu mà chúng tôi cũng sẽ đề cập trong bài viết này

Ví dụ thử bắt PHP đơn giản

Dưới đây là một ví dụ về câu lệnh thử bắt PHP cơ bản

try {
    // run your code here
}
catch (exception $e) {
    //code to handle the exception
}
finally {
    //optional code that always runs
}

Từ khóa xử lý lỗi PHP

Các từ khóa sau được sử dụng để xử lý ngoại lệ PHP

  • Thử. Khối thử chứa mã có khả năng đưa ra một ngoại lệ. Tất cả mã trong khối thử được thực thi cho đến khi có khả năng xảy ra ngoại lệ
  • Ném. 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. Sau đó, bộ thực thi PHP sẽ cố gắng tìm một câu lệnh bắt để xử lý ngoại lệ
  • Chụp 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ử. Mã trong câu lệnh bắt của bạn phải xử lý ngoại lệ đã được đưa ra
  • Cuối cùng. Trong PHP5. 5, tuyên bố cuối cùng được giới thiệu. Khối cuối cùng cũng có thể được chỉ định sau hoặc thay vì khối bắt. Mã trong khối cuối cùng sẽ luôn được thực thi sau khối thử và bắt, bất kể ngoại lệ đã được ném hay chưa và trước khi tiếp tục thực thi bình thường. Điều này hữu ích cho các tình huống như đóng kết nối cơ sở dữ liệu bất kể có xảy ra ngoại lệ hay không

PHP thử bắt với nhiều loại ngoại lệ

PHP hỗ trợ sử dụng nhiều khối bắt trong thử bắt. Điều này cho phép chúng tôi tùy chỉnh mã của mình dựa trên loại ngoại lệ đã được đưa ra. Điều này hữu ích để tùy chỉnh cách bạn hiển thị thông báo lỗi cho người dùng hoặc nếu bạn có khả năng thử lại điều gì đó không thành công lần đầu tiên

try {
    // run your code here
}
catch (Exception $e) {
    echo $e->getMessage();
}
catch (InvalidArgumentException $e) {
    echo $e->getMessage();
}

Khi nào nên sử dụng try catch-cuối cùng

Trong phiên bản PHP 5. 5, khối cuối cùng đã được thêm vào. Đôi khi trong mã xử lý lỗi PHP của bạn, bạn cũng sẽ muốn sử dụng phần cuối cùng. Cuối cùng không chỉ hữu ích cho việc xử lý ngoại lệ, nó còn được sử dụng để thực hiện mã dọn dẹp như đóng tệp, đóng kết nối cơ sở dữ liệu, v.v.

Khối cuối cùng luôn thực thi khi khối thử bắt thoát. Điều này đảm bảo rằng khối cuối cùng được thực thi ngay cả khi xảy ra ngoại lệ không mong muốn

Ví dụ về try catch-cuối cùng

try {
    print "this is our try block n";
    throw new Exception();
} catch (Exception $e) {
    print "something went wrong, caught yah! n";
} finally {
    print "this part is always executed n";
}

Dưới đây là sơ đồ cho thấy chương trình hoạt động như thế nào

Php bắt lỗi sql

Tạo các loại ngoại lệ PHP tùy chỉnh

PHP cũng cho phép tạo các loại ngoại lệ tùy chỉnh. Điều này có thể hữu ích để tạo các ngoại lệ tùy chỉnh trong ứng dụng của bạn mà bạn có thể xử lý ngoại lệ đặc biệt xung quanh

Để tạo trình xử lý ngoại lệ tùy chỉnh, chúng ta phải tạo một lớp đặc biệt với các hàm có thể được gọi khi xảy ra ngoại lệ. Lớp phải là phần mở rộng của lớp ngoại lệ

class DivideByZeroException extends Exception {};

Lớp ngoại lệ tùy chỉnh kế thừa các thuộc tính từ lớp Ngoại lệ của PHP và bạn có thể thêm các chức năng tùy chỉnh vào nó. Bạn có thể không muốn hiển thị tất cả các chi tiết của một ngoại lệ cho người dùng hoặc bạn có thể hiển thị một thông báo thân thiện với người dùng và ghi thông báo lỗi nội bộ để theo dõi

Mẫu bên dưới sử dụng ngoại lệ PHP tùy chỉnh với nhiều câu lệnh bắt

class DivideByZeroException extends Exception {};
class DivideByNegativeException extends Exception {};

function process_divide($denominator)
{
    try
    {
        if ($denominator == 0)
        {
            throw new DivideByZeroException();
        }
        else if ($denominator < 0)
        {
            throw new DivideByNegativeException();
        }
        else
        {
            echo 100 / $denominator;
        }
    }
    catch (DivideByZeroException $ex)
    {
        echo "Divide by zero exception!";
    }
    catch (DivideByNegativeException $ex)
    {
        echo "Divide by negative number exception!";
    }
    catch (Exception $x)
    {
        echo "UNKNOWN EXCEPTION!";
    }
}

Đoạn mã trên đưa ra một ngoại lệ và bắt nó bằng một lớp ngoại lệ tùy chỉnh. Các lớp DivideByZeroException() và DivideByNegativeException() được tạo dưới dạng phần mở rộng của lớp Ngoại lệ hiện có; . Khối “thử” được thực thi và một ngoại lệ được ném ra nếu mẫu số là số 0 hoặc số âm. Khối “catch” bắt ngoại lệ và hiển thị thông báo lỗi

Lưu đồ bên dưới tóm tắt cách hoạt động của mã mẫu ở trên đối với các loại ngoại lệ tùy chỉnh

Xử lý ngoại lệ PHP toàn cầu

Trong một thế giới hoàn hảo, mã của bạn sẽ xử lý ngoại lệ thích hợp. Cách tốt nhất là bạn cũng nên định cấu hình trình xử lý ngoại lệ PHP toàn cầu. Nó sẽ được gọi trong trường hợp xảy ra một ngoại lệ chưa được xử lý mà không được gọi trong khối thử bắt PHP thích hợp

Để định cấu hình trình xử lý ngoại lệ PHP toàn cầu, chúng tôi sẽ sử dụng hàm set_Exception_handler() để đặt hàm do người dùng xác định để xử lý tất cả các ngoại lệ chưa được phát hiện

function our_global_exception_handler($exception) {
    //this code should log the exception to disk and an error tracking system
    echo "Exception:" . $exception->getMessage();
}

set_exception_handler(‘our_global_exception_handler’);

Cách ghi nhật ký ngoại lệ đúng cách trong PHP của bạn, hãy thử bắt các khối

Ghi nhật ký thường là tai mắt của hầu hết các nhà phát triển khi khắc phục sự cố ứng dụng. Ghi lại các ngoại lệ để bạn có thể tìm thấy chúng sau khi chúng xảy ra là một phần thực sự quan trọng trong các phương pháp hay nhất về xử lý lỗi PHP

Hãy dùng thử Prefix, trình lược tả mã miễn phí của Stackify, để viết mã tốt hơn trên máy trạm của bạn. Tiền tố hoạt động với. NET, Java, PHP, Nút. js, Ruby và Python

Nhật ký lỗi rất quan trọng trong quá trình phát triển vì nó cho phép nhà phát triển xem các cảnh báo, lỗi, thông báo, v.v. đã được ghi lại trong khi ứng dụng đang chạy. Để bạn có thể xử lý chúng một cách thích hợp thông qua các kỹ thuật xử lý ngoại lệ PHP try catch chúng ta vừa học

Tùy thuộc vào khung công tác PHP mà bạn đang sử dụng, cho dù là Laravel, Codeigniter, Symfony hay những người khác, họ có thể cung cấp các khung công tác ghi nhật ký tích hợp. Bạn cũng có thể sử dụng Monolog, một thư viện ghi nhật ký PHP tiêu chuẩn. Bất kể bạn đang sử dụng khung ghi nhật ký nào, bạn muốn luôn ghi nhật ký các ngoại lệ quan trọng được đưa vào mã của mình

Đây là một mẫu thử/bắt ghi lại lỗi với Monolog

require_once(DIR.'/vendor/autoload.php');
use MonologLogger;
use MonologHandlerStreamHandler;

$logger = new Logger('channel-name');
$logger->pushHandler(new StreamHandler(DIR.'/app.log', Logger::DEBUG));

try {
    // Code does some stuff
    // debug logging statement
    $logger->info('This is a log! ^_^ ');
}
catch (Exception $ex) {
    $logger->error('Oh no an exception happened! ');
}

Cách sử dụng try catch với MySQL

Các thư viện PHP cho MySQL, PDO và mysqli, có các chế độ xử lý lỗi khác nhau. Nếu bạn không kích hoạt ngoại lệ cho các thư viện đó, bạn không thể sử dụng các khối thử bắt. Điều này làm cho việc xử lý lỗi trở nên khác biệt và có lẽ phức tạp hơn

PDO

Trong PDO, bạn phải bật ERRMODE_EXCEPTION khi tạo kết nối

________số 8

Tìm hiểu thêm về các thuộc tính PDO từ tài liệu PHP

mysql

Đối với mysqli, bạn phải làm điều gì đó tương tự

try {
    mysql_catchquery('CREATE TEMPORARY TABLE a (ID int(6))');
    mysql_catchquery('insert into a values(666),(418),(93)');
    mysql_catchquery('insert into b(ID, name) select a.ID, c.name from a join c on a.ID=c.ID');
    $result=mysql_catchquery('select * from d where ID=7777777');
    while ($tmp=mysql_fetch_assoc($result)) { .. }
} catch (Exception $e) {
    echo $e->getMessage();
}
0

Tìm hiểu thêm từ tài liệu MySQL

Cách xem tất cả các ngoại lệ PHP ở một nơi

Xử lý ngoại lệ thích hợp trong PHP là rất quan trọng. Là một phần của điều đó, bạn không muốn chỉ ghi nhật ký ngoại lệ của mình vào tệp nhật ký và không bao giờ biết chúng đã xảy ra

Giải pháp là sử dụng giải pháp theo dõi lỗi như Stackify's Retrace. Tất cả các lỗi được ghi lại cùng với một số chi tiết quan trọng về lỗi đó, bao gồm thời gian xảy ra, phương pháp gây ra lỗi và loại ngoại lệ

Retrace cung cấp nhiều tính năng theo dõi và giám sát lỗi quan trọng. Bao gồm khả năng xem tất cả ngoại trừ ở một nơi, xác định các lỗi duy nhất, tìm nhanh các lỗi mới sau khi triển khai, thông báo qua email về các lỗi mới, v.v.

Công cụ quản lý nhật ký và lỗi của Stackify có thể giúp bạn dễ dàng theo dõi và khắc phục sự cố ứng dụng của mình

Bản tóm tắt

Trong hướng dẫn này, chúng tôi đã chỉ ra cách sử dụng PHP try catch blocks. Chúng tôi cũng đề cập đến một số cách sử dụng nâng cao với nhiều loại ngoại lệ và thậm chí cả cách ghi nhật ký tất cả các lỗi của bạn vào thư viện ghi nhật ký. Các phương pháp hay nhất để xử lý lỗi tốt là rất quan trọng đối với bất kỳ ứng dụng PHP nào. Truy xuất có thể giúp bạn nhanh chóng tìm và khắc phục sự cố tất cả các ngoại lệ được đưa vào mã của bạn

  • Thông tin về các Tác giả
  • Bài viết mới nhất

Làm cách nào tôi có thể nhận ngoại lệ từ MySQL trong PHP?

$db = mysql_select_db('mobile', $conn);