我正在学习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用户不理解异常,认为这些异常与错误报告有关,并完全滥用了它们!尽管正确的答案很简单:
Apache的错误日志中会出现可能的错误吗?
是的,如果你告诉PHP记录你的错误。log_errors
ini设置对此负责。
如果它们真的出现在那里,那么使用尝试接球的理由是什么?
这是最有趣的问题
要处理错误消息,应永远不要使用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());
}
在这里,我们必须手动记录一条错误消息,但让其余的代码运行。
等等。