我正在尝试使用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
答案 0 :(得分:9)
您不应该进行连锁准备。 Prepare返回您应该从中获取的PDOStatement对象,execute根据该语句的执行成功返回布尔值。
$stmt = $connection->prepare($query);
$result = $stmt->execute(['General Motors']);
if ($result) {
$stmt->fetchAll(PDO::FETCH_UNIQUE);
}