2015-10-14 824 views
0

我要赶mysqli_stmt错误,如下面的伪代码:如何捕获PHP 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

您可能需要检查每种方法的返回值以捕获错误。或者使用一个定制的类来包装'mysqli_stmt'并抛出你自己的异常。 – Passerby

回答

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连接之前。

而且您可以使用此示例代码来处理您网站上的错误。请注意,在开发过程中,只需评论第一行。

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; 
} 
+1

是的,'MYSQLI_REPORT_STRICT'表示*抛出mysqli_sql_exception错误而不是警告*。 PHP总是那么直观...... –

+0

谢谢你的回复,请问你能告诉我一个代码示例吗? – Mark