2014-02-09 156 views
1

我已經寫了一個代碼,並有一個錯誤,我得到誰能告訴我什麼是錯的請嗎?登錄/註冊系統獲取致命錯誤php

錯誤致命錯誤:調用一個成員函數錯誤(c)中的非對象上:\ XAMPP \ htdocs中\ loginsistem \的index.php上線6

,但應該說OK!如果IM權

的init.php:

<?php 
session_start(); 

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

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

}); 

require_once 'functions/sanitize.php'; 
?> 

的index.php:

<?php 
require_once 'core/init.php'; 

$user =DB::getInstance()->get('users', array('username', '=', 'grega')); 

if($user->error()) { 
    echo 'No user'; 
} else { 
    echo 'OK!'; 
} 

?> 

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->_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 error() { 
     return $this->_error; 
    } 

} 
+2

你'action'方法並不總是返回'$此'。如果沒有,則調用'error()'失敗。 –

回答

2

這也可能是在這一部分:

if($this->query($sql, array($value))->error()) { 
    return $this; 
} 

在我看來,你應該修改它:

if(! $this->query($sql, array($value))->error()) { 
    return $this; 
} 
+0

omg你救了我的一天感謝的人,這是問題! – lenart95

0

拆分這樣的代碼:

// get db instance 
$db = DB::getInstance(); 
// the get function will return $this or false 
$users = $db->get('users', array('username', '=', 'grega')); 

if($users === false || $db->error()) { 
    echo 'No user'; 
} else { 
    echo 'OK!'; 
} 

我也看到在你的代碼很奇怪,當你賦值:

$field  = $where[0]; 
$operator = $where[1]; 
$value  = $where[2]; 

如果刪除「我認爲這將更好地工作。

此外,如果您在代碼上進行測試,則不需要在函數中測試錯誤。

if(in_array($operator, $operators)) { 
    $sql = "{$action} FROM {$table} WHERE {$field} {$operator} ?"; 

    $this->query($sql, array($value); 
    return $this; 
} 
+0

,但它總是返回我沒有用戶..並且我在數據庫中創建了一個用戶grega – lenart95

+0

我看到,分配值時也存在問題。 –

+0

但是當我使用這段代碼,我得到沒有用戶每次如果我寫在一個有效的用戶多數民衆贊成在數據庫中,或者如果我不沒有用戶每次 – lenart95