首页 > 解决方案 > PDO 查询返回 true 但 ->fetch() 返回错误

问题描述

我正在尝试使用 PDO 从我的数据库中选择信息。直到该->prepare()->execute()方法正常工作之前的一切。转储响应时,我得到一个布尔真实响应。

但是一旦我使用->fetchAll()我就会收到以下错误:

致命错误:在 .... 中调用布尔值上的成员函数 fetchAll()

我不确定为什么会这样。我应该在结果中收到一行。下面的代码:

    $host = 'localhost';
    $db   = 'database';
    $user = 'useername';
    $pass = 'password';
    $charset = 'utf8mb4';

    $dsn = "mysql:host=$host;dbname=$db;charset=$charset";
    $opt = [
        PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
        PDO::ATTR_EMULATE_PREPARES   => false,
    ];
    $connection = new PDO($dsn, $user, $pass, $opt);
    $connection->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );

    $query = 'SELECT * FROM gen_dealers WHERE dealer = ?';
    $result = $connection->prepare($query)->execute(['General Motors']);

    echo $result; // returns 1

    $result->fetchAll(PDO::FETCH_UNIQUE); // returns the Fatal error mentioned above

标签: phppdo

解决方案


你不应该连锁准备。Prepare 返回您应该从中获取的 PDOStatement 对象,并根据该语句执行的成功返回一个布尔值。

$stmt = $connection->prepare($query);
$result = $stmt->execute(['General Motors']);
if ($result) { 
    $stmt->fetchAll(PDO::FETCH_UNIQUE);
}

推荐阅读