我想捕捉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!';
}
我该怎么办?
答案 0 :(得分:1)
首先,你应该 never catch mysqli errors only to show such a message ,因为效率极低(在try-catch中包装每个查询!)并且有害(因为必须记录错误,而不是默默地解除)
相反,您可以定义custom error handler并让它记录错误消息,然后显示“请稍后重试”文本。当然,您希望它在任何查询失败时显示,而不仅仅是一个。
在你得到这个之后,只需在异常模式下设置mysqli,
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
此行必须在mysqli connect之前添加。
您可以使用此示例代码来处理您网站上的错误。请注意,在开发过程中,只需注释第一行。
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;
}