如何捕获 PHP mysqli_stmt 错误?
How do I catch a PHP mysqli_stmt error?
我想捕获 mysqli_stmt 错误,例如以下伪代码:
<?php
include 'db.php';
try{
$stmt=$db->prepare('INSERT INTO test(test_1, test_2) VALUES (?, ?)');
$stmt->bind_param("is", $example_variable1, $example_variable2);
$stmt->execute();
$stmt->close();
echo 'data inserted successful, everything ok!';
}catch(mysqliError $e){
echo 'please retry later!';
}
我怎样才能做这样的事情?
首先,你应该 never catch mysqli errors only to show such a message 因为它效率极低(在 try-catch 中包装每个查询!)而且有害(因为必须记录错误, 没有被默默地解雇)。
相反,您可以定义一个 custom error handler 并让它记录错误消息,然后显示此 'please retry later' 文本。您肯定希望它在任何查询失败时显示,而不仅仅是一个。
得到这个之后,只需将 mysqli 设置为异常模式,
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
此行必须在 mysqli 连接之前添加。
并且您可以使用此示例代码来处理您网站上的错误。注意在开发的时候,把第一行注释掉即可。
set_error_handler("myErrorHandler");
function myErrorHandler($errno, $errstr, $errfile, $errline)
{
error_log("$errstr in $errfile:$errline");
header('HTTP/1.1 500 Internal Server Error', TRUE, 500);
echo 'please retry later!';
exit;
}
我想捕获 mysqli_stmt 错误,例如以下伪代码:
<?php
include 'db.php';
try{
$stmt=$db->prepare('INSERT INTO test(test_1, test_2) VALUES (?, ?)');
$stmt->bind_param("is", $example_variable1, $example_variable2);
$stmt->execute();
$stmt->close();
echo 'data inserted successful, everything ok!';
}catch(mysqliError $e){
echo 'please retry later!';
}
我怎样才能做这样的事情?
首先,你应该 never catch mysqli errors only to show such a message 因为它效率极低(在 try-catch 中包装每个查询!)而且有害(因为必须记录错误, 没有被默默地解雇)。
相反,您可以定义一个 custom error handler 并让它记录错误消息,然后显示此 'please retry later' 文本。您肯定希望它在任何查询失败时显示,而不仅仅是一个。
得到这个之后,只需将 mysqli 设置为异常模式,
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
此行必须在 mysqli 连接之前添加。
并且您可以使用此示例代码来处理您网站上的错误。注意在开发的时候,把第一行注释掉即可。
set_error_handler("myErrorHandler");
function myErrorHandler($errno, $errstr, $errfile, $errline)
{
error_log("$errstr in $errfile:$errline");
header('HTTP/1.1 500 Internal Server Error', TRUE, 500);
echo 'please retry later!';
exit;
}