【问题标题】:PDO try-catch and the exception attributePDO try-catch 和异常属性
【发布时间】:2011-12-29 02:45:05
【问题描述】:

我正在使用 PDO 连接到 mysql 数据库。如果我像这样设置错误属性,我对应该在哪里使用 try catch 块感到困惑: $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

现在我有我的连接信息(用户名、密码等)和上面的行在一个单独的文件中,我将包含在我的主文件中。这些(连接信息和上面的行)存储在 try-catch 块中。

在我的主要文件中,我包含了这个文件。我的主文件中是否也需要 try-catch 块(围绕 pdo 相关的东西)? (它们是我创建和执行查询的地方)。

【问题讨论】:

  • 考虑选择meaningful username。这样做的一个好处是其他人可以使用at-replies,您会收到一条通知,说明有人在评论中向您发送了电子邮件。

标签: exception-handling pdo


【解决方案1】:

与所有例外情况一样,您需要在未处理它们的任何时候处理它们,并且在一个有意义的地方处理它们。对于可能抛出的每种方法,问问自己可以想象在哪里可以正确处理它?在调用可能引发异常的 PDO 函数时立即捕获异常可能没有意义,但在更高级别。 (例如,在创建新 PDO 对象时处理 PDOException 是没有意义的,因为后面的代码将取决于是否有一个有效的 PDO 对象;相反,它必须在一个既可以尝试从异常中恢复或优雅地失败。)这就是异常的原因:可能在较低级别检测到错误,其中可能没有足够的信息来处理错误。因此,代码会向可以处理错误的更高位置抛出异常。

在一个设计良好的项目中,数据存储访问被隔离到一个模块中,因此大部分其余代码不受数据存储的确切性质的影响。在具有这种分离的架构(例如多层或 MVC)中,数据存储异常将在数据访问层中处理,尽管“处理”可能意味着抛出不同类型的异常。

想想exception handling strategies会有所帮助:

  • 通过修复某些内容并再次尝试失败的操作来重试
  • 通过重新启动操作重试
  • 继续该过程并稍后重试该操作(不要只是继续并忽略异常)
  • 将异常(可能是同一个异常)抛出到更高级别
  • 通过向用户显示错误消息来重试,让他们有机会修复某些问题并(如果有)重试失败的操作
  • 向用户显示错误消息并结束(仅在输出 HTML 时don't use or die;无效的 HTML 不优雅)。

另见:“Exception-handling antipatterns”。

如果您要问是否将错误模式设置为PDO::ERRMODE_EXCEPTION 会导致捕获异常,那么否;恰恰相反,事实上。只有 catch 块可以处理异常。

【讨论】:

  • 谢谢,我很困惑 try-catch 块是否是多余的,因为我使用了 PDO setAttribute 函数
  • 如果答案似乎没有解决您的问题,请编辑您的问题以澄清它。 SO 是一个问答网站,而不是论坛。它在well-written questions 上运行。评论不是用来讨论的;它们用于请求澄清、简短注释等。
猜你喜欢
  • 2011-09-16
  • 1970-01-01
  • 2012-05-04
  • 1970-01-01
  • 2011-04-01
  • 2013-03-09
  • 1970-01-01
  • 2015-06-21
  • 2011-05-27
相关资源
最近更新 更多