我正在学习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和catches的原因是什么?
感谢。
答案 0 :(得分:3)
这是一个很好的问题。
大多数PHP用户不理解异常并认为这些与错误报告有关并完全滥用它们!虽然正确的答案很简单:
Apache错误日志中是否会出现错误?
是的,如果您告诉PHP记录您的错误。 log_errors
ini设置对此负责。
如果它们确实出现在那里,那么使用try和catches的原因是什么?
这是最有趣的问题。
要处理错误消息,应该永远不要使用try catches
此机制用于处理错误。不是错误消息。有本质区别,但却被大多数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());
}
这里我们必须手动记录错误消息,然后让其余的代码运行。
等等。