Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php PDO错误是否出现在Apache';谁的错误日志?_Php_Error Handling_Pdo_Apache2 - Fatal编程技术网

Php PDO错误是否出现在Apache';谁的错误日志?

Php PDO错误是否出现在Apache';谁的错误日志?,php,error-handling,pdo,apache2,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_PREPARE

我正在学习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-and-catch的原因是什么


谢谢。

这是个很好的问题。
大多数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记录您的错误<代码>日志错误ini设置对此负责

如果它们确实出现在那里,那么使用try-and-catch的原因是什么

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

要处理错误消息,只需告诉PHP记录错误。
而如果要自行处理错误,则try-catch是必不可少的

什么是处理错误?
除了错误记录之外,在发生错误时必须执行的任何操作:

回滚事务

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());
}
在这里,我们必须手动记录一条错误消息,同时让其余的代码运行

等等