Báo lỗi là điều cần thiết nhất trong lập trình. Một lập trình viên thực sự bị mù nếu họ không thể nhìn thấy các lỗi xảy ra trong quá trình thực thi tập lệnh. Vì vậy, điều rất quan trọng là phải định cấu hình báo cáo lỗi cho mã của bạn đúng cách, bao gồm cả các tương tác với cơ sở dữ liệu
Theo mặc định, khi bạn đang chạy mysqli_query[]
hoặc - tốt nhất là - prepare[]/bind[]/execute[]
, mysqli sẽ chỉ âm thầm trả về
Fatal error: Uncaught exception 'mysqli_sql_exception'
with message 'You have an error in your SQL syntax;
check the manual that corresponds to your MySQL server version
for the right syntax to use near
'apparently not valid SQL string' at line 1' in /home/www/test.php:16
Stack trace:
#0 /home/www/init.php[16]: mysqli->query['apparently not ...']
#1 /home/www/test.php[2]: include['/home/www/...']
#2 {main}
thrown in /home/www/init.php on line 16
0 nếu một truy vấn không thành công, không cho bạn biết lý doBạn sẽ chỉ nhận thấy lỗi khi lệnh sau, khi cố gắng sử dụng kết quả truy vấn, sẽ phát sinh lỗi, chẳng hạn như
Cảnh báo. mysqli_fetch_assoc[] dự kiến tham số 1 là mysqli_result, boolean đã cho
Thật không may, thông báo lỗi này không cho bạn biết vấn đề thực tế. Nó chỉ nói thẳng rằng truy vấn của bạn không thành công và không có gì khác
Nó xảy ra bởi vì theo mặc định, mysqli được cấu hình để giữ im lặng nếu một truy vấn trả về lỗi. Vì vậy, bạn có thể nói đó là một hành vi cực kỳ bất tiện
May mắn thay, mysqli có thể được cấu hình để ném PHP
Fatal error: Uncaught exception 'mysqli_sql_exception'
with message 'You have an error in your SQL syntax;
check the manual that corresponds to your MySQL server version
for the right syntax to use near
'apparently not valid SQL string' at line 1' in /home/www/test.php:16
Stack trace:
#0 /home/www/init.php[16]: mysqli->query['apparently not ...']
#1 /home/www/test.php[2]: include['/home/www/...']
#2 {main}
thrown in /home/www/init.php on line 16
1 trong trường hợp có lỗi mysql. Điều đó có nghĩa là một lỗi PHP sẽ được đưa ra tự động mỗi khi một truy vấn trả về lỗi mà bạn không cần bất kỳ nỗ lực nàoHãy xem một cuộc biểu tình nhỏ
// first of all set PHP error reporting in general
// in order to be sure we will see every error occurred in the script
ini_set['display_errors',1];
error_reporting[E_ALL];/*** THIS! ***/
mysqli_report[MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT];
/*** ^^^^^ ***/
$db = $mysqli = new mysqli[$host, $user, $pass, $database];
$res = $db->query["apparently not a valid SQL statement"];
$res->fetch_assoc[];
Và chạy lại tập lệnh của bạn. Ái chà. Một lỗi xuất hiện trong một làn khói, giải thích vấn đề là gì
Fatal error: Uncaught exception 'mysqli_sql_exception'
with message 'You have an error in your SQL syntax;
check the manual that corresponds to your MySQL server version
for the right syntax to use near
'apparently not valid SQL string' at line 1' in /home/www/test.php:16
Stack trace:
#0 /home/www/init.php[16]: mysqli->query['apparently not ...']
#1 /home/www/test.php[2]: include['/home/www/...']
#2 {main}
thrown in /home/www/init.php on line 16
Như bạn có thể thấy, đây là một thông tin khá chi tiết, bao gồm cả phần sai của truy vấn và thậm chí cả dấu vết ngăn xếp giúp bạn tìm một chức năng cụ thể được gọi là truy vấn sai
Vì vậy, một lần nữa. chỉ cần đảm bảo rằng bạn luôn có dòng thần kỳ này trước ngày 12 tháng 12 trong tất cả các kịch bản của mình
mysqli_report[MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT];
Phải làm gì với thông báo lỗi bạn nhận được?
Nó phải là một phản xạ giật đầu gối để sao chép và dán thông báo lỗi trong tìm kiếm của Google. Nó sẽ dẫn bạn đến một số câu hỏi về Stack Overflow liên quan đến vấn đề cụ thể này với nhiều câu trả lời kèm theo giải pháp
Tuy nhiên, có một khả năng khác. Bạn có thể thử đọc thông báo lỗi mà bạn nhận được. Thông thường, thông báo lỗi giải thích khá đơn giản, lỗi là gì. Tuy nhiên, một số lỗi có thể khó hiểu. Bạn phải hiểu một số cân nhắc được sử dụng trong thông báo lỗi Mysql
Hàm mysqli_error[] / mysqli. $error trả về mô tả lỗi cuối cùng cho lệnh gọi hàm gần đây nhất, nếu có
cú pháp
Phong cách hướng đối tượng
string $mysqli->error;
phong cách thủ tục
string mysqli_error [ mysqli $link ]
Tham số
TênMô tảYêu cầu/Liên kết tùy chọnMột mã định danh liên kết được trả về bởi mysqli_connect[] hoặc mysqli_init[]Chỉ bắt buộc đối với kiểu thủ tục và Tùy chọn đối với kiểu hướng đối tượng
Hàm mysqli_error[] trả về mô tả lỗi xảy ra trong lần gọi hàm MySQLi cuối cùng
cú pháp
mysqli_error[$con]
Thông số
Sr. STT Thông số và Mô tả 1lừa đảo [Bắt buộc]
Đây là một đối tượng đại diện cho một kết nối đến MySQL Server
Giá trị trả về
Hàm mysqli_error[] trong PHP trả về một giá trị chuỗi đại diện cho mô tả lỗi từ lệnh gọi hàm MySQLi cuối cùng. Nếu không có lỗi thì hàm này trả về một chuỗi rỗng
Phiên bản PHP
Chức năng này lần đầu tiên được giới thiệu trong PHP Phiên bản 5 và hoạt động trong tất cả các phiên bản sau
Ví dụ
Ví dụ sau minh họa cách sử dụng hàm mysqli_error[] [theo kiểu thủ tục] −
Điều này sẽ tạo ra kết quả sau -
Error Occurred: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FORM employee' at line 1
Ví dụ
Trong kiểu hướng đối tượng, cú pháp của hàm này là $con ->error. Sau đây là ví dụ về hàm này theo kiểu hướng đối tượng -