使用php处理mysql错误的正确方法是什么?

时间:2012-03-25 05:02:14

标签: php mysql error-handling

使用php操作sql数据库时,处理错误的“正确”方法是什么?

我目前正在做的事情是这样的:

$connection = new mysqli('hostname', 'user', 'pass', 'database');

if ($connection->connect_errno) {
    reportError("DB_CONNECTION_ERROR", $connection->connect_errno, $connection->connect_error);
displayError("DB_CONNECTION_ERROR");
}

$stmt = $connection->stmt_init();
$q = "query";

$stmt->prepare($q);
$stmt->bind_param('s', $username);
$stmt->execute();

reportError()是我编写的错误处理文件的一部分,并将错误记录在数据库中

displayError()是同一文件的一部分,告诉页面显示什么(而不是显示实际错误)。

但是我不确定如何检查其他错误,例如是否已成功准备语句或查询是否成功。任何建议赞赏!

2 个答案:

答案 0 :(得分:2)

您是否觉得将数据库连接错误写入数据库并不奇怪?

我认为使用自定义displayError()函数也没有意义。它应该是通用的_503()函数,发送相应的标题以及一般的借口。

我认为自定义logError()函数也没有意义。 PHP非常能够自己记录错误。 trigger_error()最适合我。

  

我不确定如何检查其他错误,例如是否已成功准备语句

啊,这个。异常。

答案 1 :(得分:0)

如果出现问题,Mysqli应该抛出异常。有关详细信息,请参阅mysqli_sql_exception

在您的客户端代码中,您可以将代码包装在try / catch块中:

try {

} catch (Exception $e) {

}

有时,在try / catch块中存在无法解决的异常,例如,数据库服务器已关闭,并且严重依赖于数据库的站点无论如何都无法运行。

对于那些非常关键的问题,您可以允许异常向上冒泡。然后,您应该在脚本开头set an exception handler捕获这些异常,通知管理员并执行一些日志记录,然后向用户显示500错误页面。