php - 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
解决方案
你不应该连锁准备。Prepare 返回您应该从中获取的 PDOStatement 对象,并根据该语句执行的成功返回一个布尔值。
$stmt = $connection->prepare($query);
$result = $stmt->execute(['General Motors']);
if ($result) {
$stmt->fetchAll(PDO::FETCH_UNIQUE);
}
推荐阅读
- java - springboot mongo 如果图像不存在使用现有的
- arduino-c++ - TinkerCAD Ardunio 代码错误,参数太少
- gpflow - 诱导变量的重塑 - GPflow
- sql - 创建没有重复的新 SQL 表
- javascript - 如何使用 Redux 只更新组件的一个实例?
- python - 如何将多个时间序列列转换为横截面数据?
- stripe-payments - 使用 SetupIntent 和 PaymentIntent 时,是否有等效于默认来源的方法?
- c# - 如何在 QnAMakerDialogbase 中获取 qna 响应:QnAMakerDialog
- python - 如何通过 Python 上的 Bitmex Websocket Api 接收实时数据?
- keycloak - Red Hat SSO 7.3.0.GA 的 Keycloak API 调用依赖项