我想使用PDO记录数据库错误,但我不想重复添加日志记录到我的catch块。有没有办法强制记录PDOException?
或者我是否必须创建一个扩展PDO的类,然后创建一个扩展PDOExceptions并使用它们的类。如下所示:
try {
$dbconn = new logPDO ( ... );
//...
} catch (LogException $e ) {
//..
}
我想避免创建新类只是为了解决这个问题。我无法记录PDOException似乎很奇怪。
答案 0 :(得分:0)
最简单的方法是创建一个带PDOException
并执行记录逻辑的函数。
function logPdo(PDOException $e) {
// log stuff w/ the exception instance..
}
这也可能是一个类的静态方法。如果您想要更多OO解决方案,则继承PDO
并使其捕获PDOException
,然后抛出具有log
方法或类似方法的子类或自定义Exception类,这是一种合理的方法。
答案 1 :(得分:0)
整个设置看起来很不寻常。
您不希望将日志记录添加到catch块中,但希望以数字添加这些块。
根据我的理解,处理错误的一般方法是单个应用程序范围的异常处理程序,它完成所有工作 - 在屏幕上显示错误或记录它并在向浏览器发送503时。任何错误,不仅是PDO错误。因为我发现每个错误都非常有用,值得平等对待。
为此,必须设置其own error handler以抛出异常并设置异常处理程序以记录错误。并为整个应用程序设置全局try-catch块。
虽然对于应用程序可以存活的这些少数非关键部分,可以使用带有记录器的try-catch块,但同样,我不明白为什么只有PDO - 我将整个包裹这样的块,并记录每个发生的错误,不仅是PDO-risen。因此,某些不同类型的异常(仅触发记录但不会暂停catch上的应用程序)可以解决问题。