dsw7547
2015-12-02 12:42
浏览 63
已采纳

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

I got this error message while I'm trying to get the 1st field my table in MySQL database on line 78 in db.php file!

Here's my index.php file:

<?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;
}
?>

And Here's my db.php file which contains functions:

    <?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;
    }

}
?>

Here's the line 78 that gives the error:

return $this->results()[0];

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • duannian3494 2015-12-02 12:51
    已采纳

    You may use the variable and do not call the method results()

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

    what you trying is probably not possible with your php version you can also do this

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

    You code would be correct if you have >= PHP 5.4 it is called Array dereferencing

    已采纳该答案
    打赏 评论
  • drd43058 2015-12-02 12:56

    I think you should change $_results to $_result and in results function return $this->_results; to return $this->_result;

    OR

    if you dont want to do that then change

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

    to

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

    打赏 评论

相关推荐 更多相似问题