【问题标题】:Does PDO errors appear inside Apache's error log?PDO 错误是否出现在 Apache 的错误日志中?
【发布时间】:2013-06-28 00:10:11
【问题描述】:

我正在学习 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 和 catchs 的原因是什么?

谢谢。

【问题讨论】:

    标签: php error-handling pdo apache2


    【解决方案1】:

    这是一个很好的问题。
    大多数 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());
    }
    

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

    等等。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-17
      • 2021-12-28
      • 1970-01-01
      • 2013-12-27
      • 1970-01-01
      • 1970-01-01
      • 2012-09-14
      • 2013-11-17
      相关资源
      最近更新 更多