2012-03-10 61 views
1

是否可以在一个地方用一个语句捕获mysqli调用的所有错误,还是必须单独检查每个mysqli调用的错误?使用PHP和mysqli,是否可以在所有PHP脚本中的一个地方捕获所有mysqli错误?

我想做的事的东西线:

if(mysqli_error_occurs_anywhere_in_web_app) { 
    die('<html><head></head><body>database error</body></html>'); 
}

基本上如果任何地方发生的mysqli的错误,我想输出HTML数据库错误文件。这可能吗?

回答

2

您可以将所有查询替换为您自己的查询函数,而不是直接在任何地方调用mysqli_query。例如,在你自己的DB对象中。这样,如果您需要切换数据库实现,只需切换到一个新的数据库对象,而您的查询函数的实现略有不同,而不是直接搜索/替换对mysqli_query的调用gobs。它还具有使错误处理非常简单和集中的好处。

1

你需要问自己的第一件事是你是否想以同样的方式处理所有的数据库错误。如果你无法连接到你的数据库,这是一个严重的错误,可能表明你的数据库服务器已关闭。在这种情况下,您可能需要发送某种紧急警报(如果您尚未以其他方式监控数据库)。如果由于SQL语法错误而导致查询失败,这可能表明您不是转义输入数据或者在代码中存在错误。在这种情况下,您可能希望尽可能多地记录信息,以便稍后调试/排序问题。

所以,除此之外,你可能需要做的第一件事就是包装你的mysqli函数,这样你就可以捕获各种错误并处理它们的需要(通过编写你自己的DB类或使用你自己的函数) - PHP文档给出了有关如何开始执行此操作的示例(mysqli docs)。或者你可以看看PDO,AFAIAA有更多有用的错误处理(混合了异常和返回值)。

然后,您将需要代码中的一个单一点来处理此问题。如果你有某种前端控制器,你可能会把它放在那里。或者你可以编写自己的自定义异常处理程序来实现你所需要的(set_exception_handler)。

最快最肮脏的解决方案是编写自己的自定义错误处理程序来捕获和解析所有错误并采取相应措施(可能重定向到已经记录任何信息的db错误页面)。但我确实说过这是最肮脏的解决方案吗?