PDO错误:$ pdo-> prepare()-> execute()引发err“对布尔型成员函数fetch()的调用”

问题描述 投票:0回答:1

如果我的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;}

将抛出错误:

(!)致命错误:调用成员函数在boolean中获取()C:\ wamp64 \ www \ community.voyance \ 2 \ sources \ calendar.php,第27行

但是如果我直接使用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'=>字符串'-8'(length = 2)

为什么会这样?谢谢!

php mysql pdo
1个回答
1
投票

您需要PDOStatement才能提取,execute仅返回true或false。您只应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;
}

您从手册query中看到的原因是:

[PDO :: query()返回PDOStatement对象,如果失败则返回FALSE。

其中execute

成功返回TRUE,失败返回FALSE。

prepare是我们需要的:

如果数据库服务器成功准备了该语句,则PDO :: prepare()返回PDOStatement对象。如果数据库服务器无法成功准备该语句,则PDO :: prepare()返回FALSE或发出PDOException(取决于错误处理)。

prepare(这是描述,而不是返回):

从与PDOStatement对象关联的结果集中获取一行

© www.soinside.com 2019 - 2024. All rights reserved.