2014-01-16 68 views
2

你好,我有登錄該代碼和PHP註冊OOPOOP對象

<?php 
class DB { 
    public static $instance = null; 

    private  $_pdo = null, 
       $_query = null, 
       $_error = false, 
       $_results = null, 
       $_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'), array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")); 
      //$this->query('SET NAMES utf8'); 

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

    public function delete($table, $where) { 
     return $this->action('DELETE', $table, $where); 
    } 

    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 insert($table, $fields = array()) { 
     $keys = array_keys($fields); 
     $values = null; 
     $x  = 1; 

     foreach($fields as $value) { 
      $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 = array()) { 
     $set = null; 
     $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 result object 
     return $this->_results; 
    } 

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

    public function count() { 
     // Return count 
     return $this->_count; 
    } 

    public function error() { 
     return $this->_error; 
    } 
    public function lastInsertId(){ 
     return $this->_pdo->lastInsertId(); 
    } 
    public function __sleep(){ 
     return array(); 
    } 
} 

和我保存會話的用戶登錄數據,一切都在本地主機工作正常,但在我的Web服務器,我有在該行的一個問題$this->_query->bindValue($x, $param);

Catchable fatal error: Object of class __PHP_Incomplete_Class could not be converted to string in

我知道這是錯誤的東西與我的會議,但我找不到什麼問題,這是我的會話類

<?php 
class Session { 
    public static function exists($name) { 
     return (isset($_SESSION[$name])) ? true : false; 
    } 

    public static function get($name) { 
     return $_SESSION[$name]; 
    } 

    public static function put($name, $value) { 
     return $_SESSION[$name] = $value; 
    } 

    public static function delete($name) { 
     if(self::exists($name)) { 
      unset($_SESSION[$name]); 
     } 
    } 

    public static function flash($name, $string = null) { 
     if(self::exists($name)) { 
      $session = self::get($name); 
      self::delete($name); 
      return $session; 
     } else if ($string) { 
      self::put($name, $string); 
     } 
    } 
} 

請告訴我,如果你能我能做什麼,那個錯誤非常感謝你。
而這正是我存儲我的會議

public function login($username = null, $password = null, $remember = false) { 

     if(!$username && !$password && $this->exists()) { 
      Session::put($this->_sessionName, $this->data()->id); 
     } else { 
      $user = $this->find($username); 

      if($user) { 
       if($this->data()->password === Hash::make($password, $this->data()->salt)) { 
        Session::put($this->_sessionName, $this->data()->id); 

        if($remember) { 
         $hash = Hash::unique(); 
         $hashCheck = $this->_db->get(Config::get('mysql/tbl_user_sessions'), array('user_id', '=', $this->data()->id)); 

         if(!$hashCheck->count()) { 
          $this->_db->insert(Config::get('mysql/tbl_user_sessions'), array(
           'user_id' => $this->data()->id, 
           'hash' => $hash 
          )); 
         } else { 
          $hash = $hashCheck->first()->hash; 
         } 

         Cookie::put($this->_cookieName, $hash, Config::get('remember/cookie_expiry')); 
        } 

        return true; 
       } 
      } 
     } 

     return false; 
    } 

我只是做的var_dump代碼我session['user']

array(1) { 
    ["user"]=> &object(__PHP_Incomplete_Class)#1 (6) { 
     ["__PHP_Incomplete_Class_Name"]=> string(4) "User" 
     ["_db":"User":private]=> object(__PHP_Incomplete_Class)#2 (1) { 
      ["__PHP_Incomplete_Class_Name"]=> string(2) "DB" 
     } 
     ["_sessionName":"User":private]=> string(4) "user" 
     ["_cookieName":"User":private]=> string(4) "hash" 
     ["_data":"User":private]=> object(stdClass)#3 (7) { 
      ["id"]=> string(3) "144" 
      ["username"]=> string(5) "admin" 
      ["password"]=> string(64) "0611affa6664e471b939cd3197b49e0c3b47d146fc12a472c4275dbd85a7cd67" 
      ["salt"]=> string(32) "458a0dbfbd9bdca381e50b8d753329ea" 
      ["name"]=> string(12) "Artur Papyan" 
      ["joined"]=> string(19) "2013-11-29 07:41:54" 
      ["group"]=> string(1) "1" 
     } 
     ["_isLoggedIn":"User":private]=> bool(true) 
    } 
} 
+0

發佈完整的錯誤消息,因爲您在位置之前將其關閉。另外,請參考您問題中的行號。 – Daniel

+0

顯示您的代碼:構建查詢,填充會話。 – sectus

+0

可捕獲的致命錯誤:類__PHP_Incomplete_Class的對象無法轉換爲第38行中的oop/classes/DB.php中的字符串,並且第38行是此行$ this - > _ query-> bindValue($ x,$ param); – Arturik1988

回答

0

看起來好像你正試圖輸出結果爲字符串,它無法按類返回對象。

此外,參考DB.php第38行是一個紅色的鯡魚,因爲它正在向被調用函數顯示錯誤消息。

$ this - > _ query-> bindValue($ x,$ param);

而是查看代碼調用類的位置,以及如何嘗試在自己的代碼中綁定變量,而不是實際調用DB.php文件。