php - fatal error :调用未定义的方法 db::_results()

标签 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 行:

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

最佳答案

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

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

你的 php 版本可能无法实现你的尝试,你也可以这样做

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

如果您的版本 >= PHP 5.4,则您的代码是正确的,这称为数组取消引用

关于php - fatal error :调用未定义的方法 db::_results(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34043057/

相关文章:

java - 按照正确的 OO 设计使用另一个对象的功能 - 封装

具有多个 SQL 语句 : $db->Query() works, $this->db_sqlite->query() 的 PHP/SQLite 失败

php - Zend/Barcode/Barcode.php 处的 Codeigniter + Zend 条码错误

php - 在 PHP 中将大整数转换为完整字符串

php - 为什么 jQuery 和 PHP 的多项选择自动完成不起作用?

php - 如何在数据库中存储用户兴趣

php - 从 PHP 连接到 MySQL 嵌入式数据库

mysql - 多对多关系和关系模型

Mysql 查询分组依据

java - java中的最大继承级别是多少?