当没有找到记录并且失败时,PHP PDO fetch 返回 FALSE

标签 php mysql pdo exception-handling fetch

PDO 方法 fetch()返回值 FALSE 当没有找到记录失败时(例如,当数据库访问出现问题时)。

我需要能够区分这两种情况并以相应的方式处理每一种情况:

  • 在没有找到记录时向用户显示一条消息
  • 在失败时抛出异常。

那么,我的问题是:有没有办法以适当的方式处理结果?

感谢您的宝贵时间。

P.S.:当没有找到任何记录时,我本以为会收到一个空数组,而当出现问题时,我会收到值 FALSE。就像 fetchAll() 的情况一样方法。


更新:

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

总而言之,正如@pucky124 已经说过的,差异化很容易实现:

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

最佳答案

这就是 PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION 的用途。像这样使用它:

$pdo = new PDO(
            'mysql:host=localhost;port=3306;dbname=mydb;charset=utf8'
            , 'user'
            , 'pass'
            , [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION ]
    );

当以这种方式使用时,错误实际上会作为异常抛出。这意味着如果 fetch(或使用此 pdo 对象的其他方法)发生错误,将抛出异常并且该方法实际上根本不会返回。这是处理 PDO 中错误的一种非常有效的方法。现在您知道,如果 fetch 返回一个值,则不会发生错误,因此如果它为 false,则查询不会返回任何记录。

关于当没有找到记录并且失败时,PHP PDO fetch 返回 FALSE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46342798/

相关文章:

php - 多表连接.....从一个表到另一个表选择数据

javascript - View 和模型中的日期与 POST 中的日期不同

php - MySQL 查询的 PDO 错误

php - PDO 事件常量

php - Yii RBAC : access to specific items/rows

PHP 加密数据,Bash 解密

mysql - 仅选择特定列的内连接 3 个表

javascript - 我想为每个从 mysql 数据库登录的用户发送唯一记录

mysql - 如果列值为 null MySQL,如何返回特定字符串

php - mysql_num_rows 到 php 数据对象