【发布时间】:2018-03-02 17:44:38
【问题描述】:
PDO 方法 fetch() 返回值 FALSE 在没有找到记录和失败时(例如,当数据库访问出现问题时)。
我需要能够区分这两种情况,并以相应的方式处理每一种情况:
- 在未找到记录时向用户显示消息,并且
- 失败时抛出异常。
那么,我的问题是:有没有办法以适当的方式处理结果?
感谢您的宝贵时间。
fetchAll() 方法的情况一样。更新:
方法PdoStatement::fetch 在失败时抛出异常,而不是FALSE。我的回答中证明了这种情况:
总之,正如@pucky124 已经说过的,区分很容易实现:
- 如果没有找到记录,
PDOStatement::fetch返回FALSE。 PDOStatement::fetch在失败时抛出异常。
【问题讨论】:
-
为什么不使用
PDOStatement::rowCount? -
@ErikKralj 感谢您的评论。一个有趣的想法。我现在就测试一下。您也可以将其作为答案。
-
“未找到记录”表示一个空的(或用尽的)结果集。不匹配的查询不是失败的查询,它只是一个空的结果集。尝试从空(或用尽)的结果集中获取返回
false,这也不是失败。在query或prepare阶段发生由于无效查询或失败的数据库连接而导致的真正失败;如果这些成功了,那么在获取时几乎没有任何事情会失败。 -
@deceze 感谢您的评论。请给我几分钟时间回答。
-
@deceze 抱歉我的回答迟到了。我怀着极大的兴趣和关注阅读了您的评论。好吧,我不认为 emty result 失败。也不是第二种情况。关于查询和准备阶段的真正失败,我非常清楚。您提到“几乎没有什么会失败”。正是这个“几乎”是关键。我处于试图找出是否存在这种情况的位置。如果不是,那我肯定知道
fetch()返回的FALSE只是一个空结果,我可以轻松处理。
标签: php mysql pdo exception-handling fetch