【问题标题】:Should database exceptions be fatal?数据库异常应该是致命的吗?
【发布时间】:2012-12-09 23:10:49
【问题描述】:

我正在为我的站点中的数据库调用编写一个单例包装器。

当从 PDO 捕获异常时,我应该终止脚本还是将它们视为警告?

有没有办法确定 PDO 抛出的异常的严重性?比如有没有相当于 PHP 的通知?

【问题讨论】:

  • @PeeHaa 抛出通知而不是错误有什么帮助?另外,为什么您认为单例是反模式?我看不出它和globals 有什么相似之处。
  • 对不起。 I meant exceptions.
  • @cainmi:我建议您观看此 Google 技术讲座 (youtube.com/watch?v=-FRm3VPhseI)。它确实解释了单例的固有缺陷。这有点长,但值得你花每一分钟。
  • 因为在使用单例时,您会紧密耦合代码、隐藏依赖项等。您可以查看我前段时间写的关于使用 global 的答案,您会看到单例具有完全相同的问题 (stackoverflow.com/questions/11923272/…)。
  • 谢谢,我会检查一下,看看并摆脱单例。我最初在我的问题中犯了一个错误,我实际上是在捕捉 PDO 异常。我的问题仍然存在,我应该终止脚本吗?

标签: php error-handling pdo


【解决方案1】:

不,数据库错误不应该是致命的并结束您的执行 - 如果不是,您的规范会告诉您其他情况。

正如@PeeHaa 所说,错误应该抛出异常而不是杀死脚本。某些驱动程序可能默认具有此选项,但通常使用 MySQL 驱动程序时,您需要在连接时设置错误模式。

可能建议您允许抛出异常,以便在主过程失败时捕获错误并执行替代措施。

try {
    $sthmt->execute();
}
catch (Exception $error) {
    // Opps, the statement failed, revert or initiate error procedure
}

【讨论】:

  • 抱歉,我写了错误,但意味着异常 - 我正在捕获异常并记录它们。
猜你喜欢
  • 1970-01-01
  • 2010-11-22
  • 2011-11-18
  • 1970-01-01
  • 2019-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多