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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 shape_predictor_68_face_landmarks.dat
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料