2013-12-07 83 views
-2

嘿,我嘗試使用foreach函數,我得到這個錯誤...我的代碼是這樣的。php - 爲foreach提供的無效參數()

我的index.php

require_once 'core/init.php'; 
$user = DB::getInstance()->get('users', array('username', '=', 'kostas')); 
if(!$user->count()) { 
    echo "No user"; 
}else { 
    foreach ($user->results() as $user) { 
     # code... 
     echo $user->username, '<br>'; 
    } 
} 

和我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->_reults = $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 results() { 
     return $this->_results; 
    } 
    public function error() { 
     return $this->_error; 
    } 
    public function count() { 
     return $this->_count; 
    } 
} 
?> 

你能告訴我怎麼可能去錯在這裏??? 我的數據庫已經在users表中有一個用戶名kostas的表,所以它應該返回結果corectly。

+0

你 - 代碼「$這一> _ reults」 ..打字錯誤 – Hardy

+0

傳遞給類的錯誤參數get()方法將返回一個布爾錯誤,您無法處理:這裏不是問題,但您應該解決它 –

+0

您可能會從[this] (http://stackoverflow.com/q/11369360/727208)後。 –

回答

1

了變量

foreach ($user->results() as $u) { 
    //# code... 
    echo $u->username, '<br>'; 
} 
1
foreach ($user->results() as $user) { 

您使用的是同一個變量兩次在這裏,可能是這個問題嘗試不同的名字呢?

您可以重命名其中一個變量。在這裏,我改名爲第一$user$userQuery,因爲我覺得這是更清楚:

$userQuery = DB::getInstance()->get('users', array('username', '=', 'kostas')); 
if(!$userQuery->count()) { 
    echo "No user"; 
}else { 
    foreach ($userQuery->results() as $user) { 
     # code... 
     echo $user->username, '<br>'; 
    } 
} 

或者你可以重命名的foreach變量:

foreach ($user->results() as $usr) { 
+0

這是一個愚蠢的錯誤傢伙 $ this - > _ reults = $ this - > _ query-> fetchAll(PDO :: FETCH_OBJ); 正確: $ this - > _ results = $ this - > _ query-> fetchAll(PDO :: FETCH_OBJ); 感謝您的答覆... –