2014-03-31 101 views
1

plz幫助我.. 致命錯誤:調用C:\ xampp \ htdocs \ Rikarsen中的非對象的成員函數count() .hol.es \ core \ init.php 32行致命錯誤:調用非對象的成員函數count()

我正在學習PHP OOP登錄/註冊系統。在記住我(第19/23部分)中建立了這個錯誤。

我得告訴我,如果其他代碼

的init.php

<?php 
session_start(); 

$GLOBALS ['config'] = array(
    'mysql' => array(
     'host' => '127.0.0.1', 
     'username' => 'root', 
     'password' => '', 
     'db' => 'rikars' 
    ), 
    'remember' => array(
     'cookie_name' => 'hash', 
     'cookie_expiry' => 604800 
    ), 
    'session' => array(
     'session_name' => 'user', 
     'token_name' => 'token' 
    ) 
); 

spl_autoload_register(function($class) { 
    require_once 'classes/' . $class . '.php'; 
}); 

require_once 'functions/sanitize.php'; 


if(Cookie::exists(Config::get('remember/cookie_name')) && Session::exists(Config::get('session/session_name'))) { 
    $hash = Cookie::get(Config::get('remember/cookie_name')); 
    $hashCheck = DB::getInstance()->get('users_sessions', array('hash', '=', $hash)); 

    if($hashCheck->count()) { 
     echo 'asass'; 
    } 
} 

我想我在犯了一個錯誤db.php中

<?php 
class DB { 
    private static $_instance = null; 
    private $_pdo, 
      $_query, 
      $_error = false, 
      $_result, 
      $_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 delete($table, $where) { 
     return $this->action('DELETE *', $table, $where); 
    } 

    public function insert($table, $fields = array()) { 
     $keys = array_keys($fields); 
     $values = null; 
     $x = 1; 

     foreach($fields as $field) { 
      $values .= '?'; 
      if($x < count($fields)) { 
       $values .= ', '; 
      } 
      $x++; 
     } 

     $sql = "INSERT INTO {$table} (`" . implode('`, `', $keys) . "`) VALUES ({$values})"; 

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

     return false; 
    } 

    public function update($table, $id, $fields) { 
     $set = ''; 
     $x= 1; 

     foreach ($fields as $name => $value) { 
      $set .= "{$name} = ?"; 
      if($x < count($fields)) { 
       $set .= ', '; 
      } 
      $x++; 
     } 

     $sql = "UPDATE {$table} SET {$set} WHERE id = {$id}"; 

     if($this->query($sql, $fields)->error()) { 
      return true; 
     } 

     return false; 
    } 

    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; 
    } 
    public function ins() { 
     $instance = DB::getInstance(); 
     $instance->get('users',array('user_id','=','1')); 
     if (!$instance->Count()) { 
      echo 'No user'; 
     } else { 
      echo 'User exists'; 
     } 
    } 
} 
?> 
+0

嘗試$ hashCheck = new DB(); –

回答

2

您的方法操作返回false,但你期望的對象。

if(Cookie::exists(Config::get('remember/cookie_name')) && Session::exists(Config::get('session/session_name'))) { 
    $hash = Cookie::get(Config::get('remember/cookie_name')); 
    $hashCheck = DB::getInstance()->get('users_sessions', array('hash', '=', $hash)); 

    if($hashCheck === false) { 
     echo 'Action return false'; 
    } else { 
     $count = $hashCheck->count(); 
     if($count) { 
      echo 'Its object and count ='.$count; 
     } 
    } 
} 
+1

使用異常而不是布爾返回值的典型情況非常有意義。 – arkascha

1

請確保您的表名和列名在get方法中是正確的。我遇到了同樣的問題,這是爲我工作的解決方案。

相關問題