【问题标题】:Possibility for PDOStatement::fetch() method to throw a PDOExceptionPDOStatement::fetch() 方法抛出 PDOException 的可能性
【发布时间】:2017-08-16 08:31:24
【问题描述】:

PDOStatement::fetch() 是否有可能抛出异常(PDOException) 或者只有 $dbh->prepare($query)->execute() 会发出错误?

如果PDOStatement::fetch() 不会抛出错误,那么我可以放心地使用它,而无需将它放在try...catch 子句中

【问题讨论】:

  • 您不必将每个可能抛出异常的方法都放入try..catch,你知道吗?只有当您预期一个错误并且知道如果您发现错误时该怎么做时,这才有帮助。如果你不知道当异常发生时该怎么办,这意味着一个异常的、不可预见的问题,那么你还不如让你的程序死掉。
  • (来自文档)此函数成功时的返回值取决于获取类型。在所有情况下,失败都会返回 FALSE。
  • 基于here,如果失败,它将为所有获取类型返回false。所以即使你没有输入try..catch也没有问题,只要正确处理返回值即可
  • 查看here,了解一般 PDO 和错误处理。 PDOStatement::fetch() 在文档中没有 Errors/Exceptions 部分,因此它不会抛出一个(参见 PDO::__construct 作为如果抛出错误的预期示例)跨度>
  • @Benson 我刚刚在 MySQL 上使用 PDO 进行了快速测试,在 250 行上运行了一个简单的查询,然后在 fetch 阶段关闭了 mysql 守护进程...... fetch 继续成功。如果您真的担心异常,请将您的 PDO::fetch() 代码保留在 try/catch 中

标签: php pdo try-catch fetch


【解决方案1】:

@WeeZel 为这个问题提供了很好的答案:PDOStatement::fetch() 在文档中没有错误/异常部分,因此它不会抛出错误(请参阅 PDO::__construct 作为如果出现错误时的预期示例将被抛出)。

请参考以上cmets。

【讨论】:

    猜你喜欢
    • 2016-09-24
    • 2012-04-21
    • 1970-01-01
    • 2015-04-12
    • 2018-09-21
    • 2011-02-04
    • 2014-05-20
    • 2010-09-20
    • 2011-12-15
    相关资源
    最近更新 更多