PDO错误是否出现在Apache的错误日志中?

时间:2013-06-28 00:10:11

标签: php error-handling pdo apache2

我正在学习PHP并且有一个问题。

如果我使用以下代码连接到数据库,Apache的错误日志中是否会出现错误?

    $con = new PDO('mysql:host='.$h.';dbname='.$dbn.';charset=utf8', $u, $p);
    $con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT);
    $con->setAttribute(PDO::ATTR_EMULATE_PREPARES,false);

如果它们确实出现在那里,那么使用try和catches的原因是什么?

感谢。

1 个答案:

答案 0 :(得分:3)

这是一个很好的问题。
大多数PHP用户不理解异常并认为这些与错误报告有关并完全滥用它们!虽然正确的答案很简单:

  

Apache错误日志中是否会出现错误?

是的,如果您告诉PHP记录您的错误。 log_errors ini设置对此负责。

  

如果它们确实出现在那里,那么使用try和catches的原因是什么?

这是最有趣的问题。
要处理错误消息,应该永远不要使用try catches 此机制用于处理错误。不是错误消息。有本质区别,但却被大多数PHP人员误解了。

要处理错误消息,您只需要告诉PHP记录错误 如果您要处理错误本身,尝试捕获是必不可少的。

什么是处理错误?
在错误记录旁边出现错误时你必须做的任何事情:

回滚交易

try {
    $dbh->beginTransaction();
    // some SQL stuff
} catch (Exception $e) {
    $dbh->rollback();
    throw $e;
}

请注意,我们在处理错误后重新抛出异常

在不重要的代码块中发生错误非致命

try {
    some_non_critical_function();
} catch (Exception $e) {
    log_error($e->getMessage().$e->getTrace());
}

这里我们必须手动记录错误消息,然后让其余的代码运行。

等等。