1

我想使用 PDO 记录数据库错误,但我不想重复将日志记录添加到我的 catch 块中。有没有办法强制记录 PDOException?

或者我是否必须创建一个扩展 PDO 的类,然后创建一个扩展 PDOExceptions 的类并改用它们。如下所示:

try {
  $dbconn = new logPDO ( ... );
  //...
} catch (LogException $e ) {
  //..
}

我想避免创建新类只是为了解决这个问题。我无法记录 PDOException 似乎很奇怪。

4

2 回答 2

0

最简单的事情是创建一个接受PDOException并执行日志记录逻辑的函数。

function logPdo(PDOException $e) {
  // log stuff w/ the exception instance..
}

这也可能是类上的静态方法。但是,如果您想要一个更 OO 的解决方案,子类化PDO并让它捕获PDOException然后抛出一个具有log方法或类似方法的子类或自定义 Exception 类,这是一种合理的方法。

于 2012-12-30T06:33:26.747 回答
0

整个设置对我来说看起来很不寻常。
您不想将日志记录添加到您的 catch 块中,但希望将这些块添加到数字中。

据我了解,处理错误的一般方法是单个应用程序范围的异常处理程序来完成所有工作 - 要么在屏幕上显示错误,要么记录它,同时将 503 发送到浏览器。在任何错误上,不仅是 PDO 错误。因为我发现每一个错误都非常有用,值得平等对待。

为此,必须设置自己的错误处理程序以引发异常并设置异常处理程序以记录错误。并为整个应用程序设置全局 try-catch 块。

虽然对于应用程序可以在没有的情况下生存的这几个非关键部分,可以使用内部带有记录器的 try-catch 块,但同样,我不明白为什么只使用 PDO - 我会包装整个这样的块,并记录发生的每个错误,而不仅仅是 PDO-risen。因此,某些不同类型的异常(仅触发日志记录但不会在捕获时停止应用程序)可以解决问题。

于 2012-12-30T09:37:53.893 回答