【发布时间】: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 中