php - PDO 错误:$pdo->prepare()->execute() 抛出错误“在布尔值上调用成员函数 fetch()”
问题描述
如果我的 pdo 查询如下:
$sql=$pdo->prepare('select timezone from wo_users where user_id=?')->execute(array($wo['user']['user_id']));
while($row=$sql->fetch()){var_dump($row);die;}
会抛出错误:
( ! ) 致命错误:在第 27 行的 C:\wamp64\www\community.voyance\2\sources\calendar.php 中的布尔值上调用成员函数 fetch()
但是如果我直接使用 query() 的 pdo 查询不会抛出错误:
$sql=$pdo->query('select timezone from wo_users where user_id=1;');
while($row=$sql->fetch()){var_dump($row);die;}
C:\wamp64\www\community.voyance\2\sources\calendar.php:27: 数组 (size=1) 'timezone' => string '-8' (length=2)
为什么会这样?谢谢!
解决方案
你需要一个PDOStatement
来获取,execute
只返回真或假。您应该只execute
使用PDOStatement
. 这会给你一个你可以返回的结果对象fetch
或一个错误。对于 PDO 错误处理,请参阅My PDO Statement doesn't work。
$stmt = $pdo->prepare('select timezone from wo_users where user_id=?');
$stmt->execute(array($wo['user']['user_id']));
while($row = $stmt->fetch()){
var_dump($row);
die;
}
正如您从手动查询中看到的那样,因为:
PDO::query() 返回一个 PDOStatement 对象,如果失败则返回 FALSE。
在哪里执行:
成功时返回 TRUE,失败时返回 FALSE。
这prepare
就是我们需要的:
如果数据库服务器成功准备语句,PDO::prepare() 返回一个 PDOStatement 对象。如果数据库服务器无法成功准备语句,则 PDO::prepare() 返回 FALSE 或发出 PDOException(取决于错误处理)。
并获取(这是描述,而不是返回):
从与 PDOStatement 对象关联的结果集中获取一行
推荐阅读
- entity-framework - 如何修复我的 API 中的“异常:无效通道”错误
- react-native - 如何使用 react-native-gifted-chat 使短信可点击
- xml - 如何动态更改 xsl:output 方法属性值?
- python - Kivy:我如何重置复选框活动值
- css - 清理 node_modules 后缺少包
- apache-kafka - max.in.flight.requests.per.connection 和 Spring Kafka Producer 使用 KafkaTemplate 同步事件发布
- awk - Grep 在一行中的随机位置获取大于整数的值
- java - 从 java 客户端与 curl -d 发布到 Django 表单
- javascript - javascript 预期表达式,得到关键字'break'
- java - 为什么 Maven 中的动态版本范围不如最初预期的有用?