2

I'm learning PHP and have a question.

If I use the following code to connect to a database, will possible errors appear inside Apache's error log?

    $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);

If they do appear there, what's the reason to use try and catches?

Thanks.

4

1 回答 1

3

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

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

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

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

这是最有趣的问题。
要处理错误消息永远不要使用 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());
}

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

等等。

于 2013-06-28T04:33:00.283 回答