如果我的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)
为什么会这样?谢谢!
您需要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对象关联的结果集中获取一行