2013-06-28 41 views
2

我正在学习PHP,并有一个问题。PDO错误是否出现在Apache的错误日志中?

如果我使用下面的代码连接到数据库,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和catch的原因是什么?

谢谢。

回答

3

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

可能的错误会出现在Apache的错误日志里面吗?

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

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

这是最有趣的问题。
要处理一个错误消息应该永远不会使用尝试捕获
该机制处理错误。不是错误消息。这里有本质的区别,但被大多数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()); 
} 

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

等等。