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

Php PDO查询返回true,但->;fetch()返回错误,php,pdo,Php,Pdo,我正在尝试使用PDO从我的数据库中选择信息。在->prepare()->execute()方法运行正常之前,一切正常。我在转储响应时得到一个布尔真响应 但是,我一使用->fetchAll()就会出现以下错误: 致命错误:在…中对布尔值调用成员函数fetchAll() 我不知道为什么会这样。我应该在结果中收到一行。代码如下: $host = 'localhost'; $db = 'database'; $user = 'useername'; $pass = '

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

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

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

您刚才说
execute
返回
true
。<代码> $结果>代码> > <代码>真的<代码>有一个<代码> FETCHALLU/<代码>方法吗?您应该考虑使用其中的一个,我个人建议我写的一个调用,您的整个代码(包括DB安装)可以用3行替换。一行用于包含类,一行用于定义
$db
变量,一行用于实际查询<代码>$result=$db->all('从经销商=?'的gen_经销商处选择*,['General Motors')@GrumpyCrouton很有趣。所以我假设你的包装器可以处理任何向它抛出的查询……甚至更复杂的查询?@我在所有项目中都使用过它,但没有发现任何它不能做的事情。它应该能够做本地PDO可以做的任何事情。如果你发现它不能做些什么,请随意在Github中发布一个问题,我将尝试找到问题的解决方案。@我刚刚对类做了一个小更新,如果你已经在使用它,这个更新将不会破坏你现有的代码,所以我建议你使用最新版本。我还对整个文档做了大量的修改,所以您也可以检查它,不需要检查execute的返回值。如果启用了
ERRMODE\u EXCEPTION
,则该值不应为false。如果您可以依赖错误异常模式永不更改,则@Dharman可能为true。但是,根据定义,execute确实返回bool,因此最好还是检查结果。
prepare
&
fetchAll
也是如此,而您永远不会检查它。@Dharman这是真的。。。这只是一个基于给定代码的示例。在一个真实的例子中,你会检查你是否得到了一个真实的PDO语句,并且你会实际使用结果。。