如何捕获 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;
}