Php 对成员函数count()的调用

Php 对成员函数count()的调用,php,mysql,Php,Mysql,我收到一个“调用成员函数count()”错误。我尝试过各种方法来解决这个问题,但现在我被卡住了 问题在于: var_dump($data, $field); if($user->count()) { $this->_data = $data->first(); 这是我的密码: class user { private $_db, $_data; public function __construct($user = null) {

我收到一个“调用成员函数count()”错误。我尝试过各种方法来解决这个问题,但现在我被卡住了

问题在于:

var_dump($data, $field);

if($user->count()) {
   $this->_data = $data->first();
这是我的密码:

class user {
    private $_db,
    $_data;

    public function __construct($user = null) {
        $this->_db = DB::getInstance(); 
    }

    public function create($fields = array()) {
        if(!$this->_db->insert('users', $fields)) {
            throw new exception('There was a problem creating an account.');
        }
    }

    public function find($user = null) {
        if($user) {
            $field = (is_numeric($user)) ? 'id' : 'username';   
            $data = $this->_db->get('users', array($field, ' = ', $user));

            var_dump($data, $field);
            if($user->count()) {
                $this->_data = $data->first();
                return true;    
            }
        }
        return false;
    }

    public function login($username = null, $password = null) {
        $user = $this->find($username);

        if($user) {
            if($this->data()->password === hash::make($password, $this->data()->$salt)) {

                echo 'OK!';

            }
        }

        return false;
    }

    private function data() {
        return $this->_data;
    }
}

classdb{
私有静态$\u实例=null;
私人$(pdo),
$\u查询,
$\u错误=false,
$\u结果,
$\计数=0;
私有函数_u构造(){
试一试{
$this->_pdo=new pdo('mysql:host='.Config::get('mysql/host')。;dbname='.Config::get('mysql/db'),''.Config::get('mysql/username'),''.Config::get('mysql/password');
回声“连接”;
}捕获(PDO$e){
死亡($e->getMessage());
}
}
公共静态函数getInstance(){
if(!isset(self:$\实例)){
self::$_instance=new DB();
}
返回self::$\u实例;
}
公共函数查询($sql,$params=array()){
$this->_error=false;
如果($this->_query=$this->_pdo->prepare($sql)){
$x=1;
如果(计数($params)){
foreach($params作为$param){
$this->_query->bindValue($x,$param);
$x++;
}
}
如果($this->\u query->execute()){
$this->\u results=$this->\u query->fetchAll(PDO::FETCH\u OBJ);
$this->_count=$this->_query->rowCount();
}否则{
$this->_error=true;
}
}
退还$this;
}
私有函数action($action,$table,$where=array()){
如果(计数($where)==3){
$operators=array(“=”、“>”、“=”、“如果此代码:

        $field = (is_numeric($user)) ? 'id' : 'username';   
指示
$user
有时可能不是对象,为什么要无条件地执行此操作

        if($user->count()) {
哪项要求
$user
始终是一个对象?

编辑: 您在调用$this->\u db->get时使用了错误的运算符。您传入了“=”,但可接受的运算符是“=”(没有空格)。这与下面的建议相结合将解决您的问题

看起来您需要
$data->count()
而不是
$user->count()

您应该使用更好的变量名,在实际值不是用户对象的几个地方使用$user

公共函数find($user=null){

这是一个数字或字符串,请尝试

公共函数find($queryParam=null){

$user=$this->find($username);

这是一个布尔值,请尝试


$userFound=$this->find($username)
您的
query
方法使用上次执行的查询的计数更新属性
$\u count
。您有一个公共方法来访问此属性;
count()
。您的数据库类对象保存在属性
\u db
中。因此,我们可以执行以下操作:

if($this->_db->count()) {
   $this->_data = $data->first();

$user是(名称不正确的)方法参数,与调用find的对象($this)不同。此外,这不是一个答案。抱歉,粘贴了错误的方法调用。OP之后有
$user->count()
。感谢您的快速响应,但是($data->count())也不起作用。$data在我的变量转储中返回false。仍然感到困惑。我也将尝试这些其他建议。@RubiRed我已经更新了我的答案,如果$success为false,则您的查询没有正确执行,在这种情况下,您需要进一步调试它。@RubiRed我再次查看了这个问题,发现您在中使用了错误的运算符您的get查询,请参阅上面的“编辑我的答案”。在这种情况下,这是一个错误的答案,因为这将返回上次运行查询的计数。由于使用了错误的运算符,因此该查询永远不会运行。
public function find($user = null) {
    if($user) {
        $field = (is_numeric($user)) ? 'id' : 'username';   
        $data = $this->_db->get('users', array($field, '=', $user));

        if($data && $data->count() > 0) {
            $this->_data = $data->first();
            return true;    
        }
    }
    return false;
}
if($this->_db->count()) {
   $this->_data = $data->first();