未捕获错误:在布尔值上调用成员函数fetchAll()

时间:2016-12-18 07:44:58

标签: php pdo execute

的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()方法中,获取错误信息,任何想法? ;

3 个答案:

答案 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();

问候。