PDO第一行结果作为std对象返回,其值在std对象之外

时间:2019-07-16 13:19:05

标签: php mysql pdo

我使用PDO执行MySQL查询,该查询基于Cookie提供的哈希值来获取user_id。我可以获取信息,但结果是

stdClass Object ( 
    [id] => 3 
    [user_id] => 14 
    [hash] => 666114c54540c7a12c1b4d5bcb42e47c4be8c4f7afc4bb94fb3ee446e9a4a495 
) 14

14的user_id也将在对象之外返回,这意味着我想这样做;

    echo $object->user_id

我得到1414 ..我看不到任何应该在对象外部返回14的东西。 我的代码如下:

    $hash = Cookie::get(Config::get('remember/cookie_name'));
    $hashCheck = DB::getInstance()->get('users_session', array('hash', '=', $hash));
    $user = $hashCheck->first()->user_id;
    //Do something with the $user

该数据库类如下:

class DB {
    private static $_instance = null;
    private $_pdo, //Change to dhb
            $_query, //Change to stmt
            $_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->_results = $this->_query->fetchAll(PDO::FETCH_OBJ);
                $this->_count = $this->_query->rowCount();
            } else {
                $this->_error = true;

            }
        }
        return $this;
    }

    public 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 false;

    }

    public function get($table, $where){
        return $this->action('SELECT *', $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;
    }



}

0 个答案:

没有答案