的index.php:
$db = new Db();
$param = [':name' => 'Alex'];
$data = $db->sql('select * from test where name = :name',$param)->query();
var_dump($data);
并收到错误:
Fatal error: Uncaught Error: Call to a member function fetchAll() on boolean
db.php中
public function sql($sql,array $params = null)
{
$sql = $this->connection->prepare($sql);
if($params){
foreach ($params as $key => $param) {
$sql->bindParam($key, $param);
}
}
$this->statement = $sql;
return $this;
}
public function query($type = 1)
{
$statement = $this->statement->execute();
return ($type == 1) ? $statement->fetchAll(static::$DB_FETCH) : $statement->fetch(static::$DB_FETCH);
}
如果我在sql()方法中运行execute()和fetch()其中的数据,它可以真正获取数据,但将execute()和fetch()放到query()方法中,获取错误信息,任何想法? ;
答案 0 :(得分:2)
您的代码中存在错误。 在这一行:
$statement = $this->statement->execute();
execute()
方法为PDOStatement::execute。
这是签名:
public bool PDOStatement::execute ([ array $input_parameters ] )
这意味着它返回布尔值。
你的错误是你试图在布尔值上调用fetchAll()
。
有关错误消息的详细信息,请参阅this page。
答案 1 :(得分:0)
试试这个
public function query($sql,array $params = null,$type = 1)
{
$sql = $this->connection->prepare($sql);
if($params){
foreach ($params as $key => $param) {
$sql->bindParam($key, $param);
}
}
$this->statement = $sql;
$statement = $this->statement->execute();
return ($type == 1) ? $statement->fetchAll(static::$DB_FETCH) : $statement->fetch(static::$DB_FETCH);
}
和
$data = $db->query('select * from test where name = :name',$param);
答案 2 :(得分:0)
$statement = $this->statement->execute();
您的代码返回一个布尔值。但是您的语句对象包含您处理过的数据。顺便说一句,您必须通过以下方式从主语句中获取返回值:
$this->statement->fetchAll();
问候。