PDO错误是否出现在Apache';s错误日志


Does PDO errors appear inside Apache's error log?

我正在学习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);

如果它们真的出现在那里,那么使用尝试接球的理由是什么?

谢谢。

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

Apache的错误日志中会出现可能的错误吗?

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

如果它们真的出现在那里,那么使用尝试接球的理由是什么?

这是最有趣的问题
要处理错误消息,应永远不要使用try-catchs
此机制用于处理错误。不是错误消息。有本质的区别,但被大多数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());
}

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

等等。