【问题标题】:ensure that PDO fetch method result "false" is a error or empty result [duplicate]确保 PDO 获取方法结果“false”是错误或空结果 [重复]
【发布时间】:2012-04-13 17:11:01
【问题描述】:

如何识别 php PDO mysql 驱动程序的执行错误导致的提取错误或空结果?

  $sql = ' SELECT * ';
  $sql .= ' FROM test ';
  $sql .= ' WHERE id = 432 ';

  $statement = $this->_db->prepare($sql);
  $status = $statement->execute();

  var_dump($status);

  $result = $statement->fetch(\PDO::FETCH_ASSOC);

  var_dump($result);

  output:
  bool(true)
  bool(false)

所以,我用 pdo 准备语句,然后执行 sql,因为没有错误,所以状态为 true。然后我获取结果,在这种特定情况下,不存在 id = 432 的行。所以 fetch 方法返回 false。我的问题是 fetch 方法在出现错误时也会返回 false!。

如何确定 fetch "false" 结果是错误还是空结果?

【问题讨论】:

    标签: php mysql pdo


    【解决方案1】:

    如果出现错误,PDO 将抛出一个您可以捕获的异常。用 try catch 包装你的代码,它应该捕获任何异常。

    try {
        $rs = $db->prepare('SELECT * FROM foo');
        $rs->execute();
        $foo = $rs->fetchAll();
    } catch (Exception $e) {
        echo 'Error: '.$e->getMessage();
    }
    

    【讨论】:

    • 这需要相应地设置 PDO::ATTR_ERRMODE:us.php.net/manual/en/pdo.setattribute.php
    • 这适用于 pdo_mysql,但让我为 pdo_sqlsrv 添加一个快速注释:根据我的经验,即使记录集为空,它也会引发异常。
    • 确切地说,错误是“活动结果集中没有更多行”,当您尝试获取已经完全获取的记录集时会产生错误。 pdo_mysql 不会发生这种情况,它只会返回 false。
    • 更多细节在这里 stackoverflow.com/questions/53063059/… ,您似乎只从您尝试获取空记录集的第二次开始收到错误
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-27
    • 1970-01-01
    • 2020-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多