Php PDO fetch()是否在失败时引发异常?

Php PDO fetch()是否在失败时引发异常?,php,mysql,pdo,exception-handling,fetch,Php,Mysql,Pdo,Exception Handling,Fetch,如果PDO错误报告系统设置为抛出异常,那么该方法是否在失败时抛出异常?例如,如果我设置: PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION 你知道这种情况吗 多谢各位 更新: 方法PdoStatement::fetch在失败时确实抛出异常,而不是FALSE。我的回答中说明了这种情况: 总之: PDOStatement::fetch如果未找到任何记录,则返回FALSE。 PDOStatement::fetch在失败时抛出异常。 有一种说法是:

如果PDO错误报告系统设置为抛出异常,那么该方法是否在失败时抛出异常?例如,如果我设置:

PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
你知道这种情况吗

多谢各位


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

总之:

  • PDOStatement::fetch
    如果未找到任何记录,则返回
    FALSE
  • PDOStatement::fetch
    在失败时抛出异常。
    • 有一种说法是:

      警告:在以下情况下,fetch()不符合SQL-92 SQLSTATE标准 处理空数据集

      而不是将errorcode类设置为20以指示“无数据 found”,它返回一个表示成功的00类,并返回NULL 给打电话的人

      这也可以防止异常机制触发

      程序员需要为空结果集显式编写测试代码 在任何fetch*()之后,而不是依赖 关系数据库管理系统

      我试着把它作为一个bug记录下来,但它被认为是“作为一个bug工作” 有意的”。只是有点头晕

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

      更新:

      接受的答案提到了一个错误,它是错误报告中提供的测试代码不会导致抛出异常。它实际上是在2007年修复的。

      用户声称fetch()引发了一个异常。我会非常小心地假设它不会或不会抛出异常,因为它们通常是在您准备或绑定时抛出的。这是将调用放在try块中的一个很好的理由。因此,为了回答这个问题,在极不可能发生故障的情况下,yes fetch()应该抛出异常,在这种情况下它确实抛出了异常。现在,看看是否还有其他情况会很有趣。

      您的答案在问题中提供的链接中。通常您在获取之前已经看到异常。为什么不试试看是否存在异常thrown@Nima谢谢你,尼玛。明确地说,我没有找到它!我知道它在失败时返回“FALSE”,但我的问题是:这足以让我100%知道,如果在抛出异常时设置了错误报告,它将抛出异常吗?@Akintude我终于找到了一个案例,它允许我模拟
      PDOStatement::fetch()
      的失败情况。引发了一个异常。我还发布了一个详细的答案:。因此,我们可以得出结论,
      fetch()
      确实会在失败时抛出异常。再次感谢您的评论!我想你应该考虑一下
      失败
      这个词的含义,特别是当你获取结果时,逻辑上意味着
      你的语句已经成功执行了
      ,所以肯定有一个resultset。它可能是空的,但它存在。我理解你的意思。不,我指的是真正的失败。就像在
      prepare()
      execute()
      案例中,当出现错误并抛出异常时。嗨,尼玛。我已经完成了所有我能做的测试。答案中的注释只处理找不到记录的情况。正如我在先前的评论中解释的那样,这本身并不是一个“失败”。但事实上,无论发生什么情况,在两种情况下,错误代码始终保持不变——00000:未找到记录时和失败时。并且没有抛出异常。所以,非常感谢你的回答。我接受它,因为它在某种程度上是整个万维网中唯一一个官方和相关的答案:-)我想如果语句执行成功,那么
      fetch
      操作将成为处理PDO内部数据结构的任务。因此,不应该有任何失败。如果我面对这样的事情(抓取时失败),我会在PDO本身中寻找一个bug!你完全正确!!!:-)我的测试显示,即使mysql服务在execute()之后和fetch()之前关闭/终止,也会显示记录(尽管同时会发出警告)。所以,是的,fetch()应该没有失败的原因。你好,pucky。首先,我感谢你的回答!你提供了一个很好的例子。不幸的是,我无法重现这个案例。在这种情况下没有引发异常。可能是因为它指的是一个旧的PHP版本。但是,既然我的另一个测试成功了,我肯定同意你的答案,因为它是正确的。我知道我的问题有点自以为是。对不起。非常感谢您花时间为我的问题找到一个好的解决方案!最后,你能在回答中提到我的另一个问题吗?所以所有用户都有一个活生生的证据,fetch()抛出异常?非常感谢。