我不知道它为什么会返回Call to a member function fetchAll() on a non-object
错误,因为我在_sth对象上使用了fetchAll方法。
有人知道为什么这样做吗?
FormValidator PHP
$users = $this->_db->query("SELECT * FROM $ruleValue WHERE $input = ?", array($inputValue));
if($users->count()) {
$this->addError($input, $rule);
}
方式
public function query($sql, $params = array()) {
$this->_sth = $this->_dbh->prepare($sql);
if($this->_sth = $this->_sth->execute($params)) {
return $this->_sth->fetchAll(PDO::FETCH_OBJ);
}
return false;
}
答案 0 :(得分:3)
if($this->_sth = $this->_sth->execute($params)) {
单=
是赋值运算符。 execute()
返回布尔值TRUE或FALSE,然后您将其分配给$this->_sth
。
return $this->_sth->fetchAll(PDO::FETCH_OBJ);
TRUE和FALSE都不是对象,并且没有fetchAll()
方法。
来自@RocketHazmat的评论是正确的,您可以测试execute()
的返回值,而无需将其分配给_sth。例如:
if($this->_sth->execute($params)) {
return $this->_sth->fetchAll(PDO::FETCH_OBJ);
}
答案 1 :(得分:1)
正如我已经说过,有两个巨大的缺陷。
请勿在
中介绍州public function query($sql, $params = array()) {
$sth = $this->_dbh->prepare($sql);
$sth->execute($params);
return $sth->fetchAll(PDO::FETCH_OBJ);
}
就是你需要的一切。
不要偷懒,写完整查询。
$user = $this->_db->query("SELECT * FROM users WHERE param = ?", [$inputValue]);
if($user) {
$this->addError($input, $rule);
}