PDO fetch()在失败时抛出异常吗?

时间:2017-09-21 13:45:08

标签: php mysql pdo exception-handling fetch

如果PDO错误报告系统设置为抛出异常,方法PDOStatement::fetch()是否会在失败时抛出异常?例如。如果我设置:

PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION

你知道这种情况吗?

非常感谢。

UPDATE:

方法PdoStatement::fetch确实会在失败时抛出异常,而不是FALSE。我的回答证明了这种情况:

总结:

    如果没有找到记录,
  • PDOStatement::fetch会返回FALSE
  • PDOStatement::fetch会在失败时抛出异常。

2 个答案:

答案 0 :(得分:-1)

a user note on the page you mentioned in your question表示:

  

警告:fetch()不符合SQL-92 SQLSTATE标准   处理空数据集。

     

而不是将errorcode类设置为20以指示"没有数据   找到",它返回一个00的类,表示成功,并返回NULL   给来电者。

     

这也可以防止异常机制被解雇。

     

程序员需要为空结果集显式编写测试代码   在任何fetch *()之后而不是依赖于的默认行为   RDBMS。

     

我尝试将此记录为一个错误,但它被解雇为"正在工作   意&#34 ;.只是一个头脑。

根据本说明,您的问题的答案是

<强>更新
接受的答案提到了marked as fixed的错误,错误报告中提供的测试代码不会导致异常被抛出。它实际上已于2007年修复。

答案 1 :(得分:-1)

用户here声称fetch()引发了异常。我会非常小心地假设它不会或不会因为它们在准备或绑定时被抛出而抛出异常。这是将调用放在try块中的一个很好的理由。所以要回答这个问题,在极不可能发生的失败事件中,是的fetch()应该抛出一个异常,并且在一个案例中就是这样做了。现在看看是否还有其他案例会很有趣。