致命错误:调用未定义的方法db :: _ results()

时间:2015-12-02 12:42:09

标签: php mysql oop

我在 db.php 文件中尝试在第78行的MySQL数据库中获取第一个字段时收到此错误消息!

这是 index.php 文件:

<?php 
require_once 'php_core/init.php';

$user = db::getInstance()->get('admins',array('username', '=', 'alex'));

if (!$user->count()){
    echo 'No Admin';
}else{
    echo $user->first()->username;
}
?>

这是我的db.php文件,其中包含函数:

    <?php 
class db{
    private static $_instance = null;
    private $_pdo,
            $_query,
            $_error = false,
            $_results,
            $_count = 0;

    private function __construct(){
        try{
            $this->_pdo = new pdo('mysql:host=' . config::get('mysql/host') . ';dbname=' . config::get('mysql/db'),config::get('mysql/username'),config::get('mysql/password'));
        }catch(PDOException $e){
            die($e->getMessage());
        }
    }

    public static function getInstance(){
        if(!isset(self::$_instance)){
            self::$_instance = new db();
        }
        return self::$_instance;
    }

    public function query($sql,$params = array()){
        $this->_error = false;
        if ($this->_query = $this->_pdo->prepare($sql)){
            $x = 1;
            if (count($params)){
                foreach($params as $param){
                    $this->_query->bindValue($x,$param);
                    $x++;
                }
            }
            if($this->_query->execute()){
                $this->_result = $this->_query->fetchAll(pdo::FETCH_OBJ);
                $this->_count = $this->_query->rowCount();
            }else{
                $this->_error = true;
            }
        }
        return $this;
    }

    private function action($action,$table,$where = array()){
        if (count($where) === 3){
            $operators = array('=','>', '<' ,'>=','<=');

            $field       = $where[0];
            $operator    = $where[1];
            $value       = $where[2];

            if (in_array($operator,$operators)){
                $sql = "{$action} FROM {$table} WHERE {$field} {$operator} ?";

                if (!$this->query($sql,array($value))->error()){
                    return $this;
                }

            }
        }
        return $this;
    }

    public function get($table,$where){
        return $this->action('SELECT *', $table,$where);
    }

    public function delete($table,$where){
        return $this->action('DELETE', $table,$where);
    }

    public function results(){
        return $this->_results;
    }

    public function first(){
        return $this->results()[0];
    }

    public function error(){
        return $this->_error;
    }

    public function count(){
        return $this->_count;
    }

}
?>

这里是提供错误的第78行:

  

返回$ this-&gt; results()[0];

2 个答案:

答案 0 :(得分:0)

您可以使用变量,不要调用方法results()

public function first(){
    return $this->_results[0];
}

您尝试的内容可能不适用于您的php版本,您也可以这样做

public function first(){
    $results = $this->results();
    return $results[0];
}

如果您使用&gt; = PHP 5.4,则代码​​将是正确的,它称为数组解除引用

答案 1 :(得分:0)

我认为您应该将$_results更改为$_result,并将结果函数return $this->_results;更改为return $this->_result;

OR

如果您不想这样做,请更改

$this->_result = $this->_query->fetchAll(pdo::FETCH_OBJ);

$this->_results = $this->_query->fetchAll(pdo::FETCH_OBJ);