PDO查询返回true,但-> fetch()返回错误

时间:2018-08-16 13:16:05

标签: php pdo

我正在尝试使用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

1 个答案:

答案 0 :(得分:9)

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

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