我如何捕获PHP mysqli_stmt错误?

时间:2015-10-14 08:45:40

标签: php mysqli prepared-statement

我想捕捉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!';
}

我该怎么办?

1 个答案:

答案 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;
}