2016-04-25 112 views
0

下面我有一個類函數將緩存的用戶信息,有什麼錯誤即時得到低於PHP變量不是一個數組

Warning: Variable passed to each() is not an array or object in C:\inetpub\wwwroot\application\base\classes\class.user.php on line 67 

及以下的功能是。

public function cacheUserInfo() { 
     if (!$this->loggedIn()) 
      return; 

     global $autoLoader; 
     $userQuery = $autoLoader->getLibrary('database')->query("SELECT motto,look,rank,last_login,block_newfriends FROM `users` WHERE `id` = '" . $_SESSION['user']['id']. "'"); 

     $userRow = mysqli_fetch_array($userQuery); 

     while (list($var, $val) = each($userRow)) { 
      $_SESSION['user'][$var] = $val; 
     } 
    } 

對數據庫庫的查詢功能就是MySQLi連接的 - > query($ sql)函數。

這是工作一秒現在它不... 爲什麼我得到這個錯誤?

+0

'mysqli_fetch_array'返回數組或爲空,所以如果它不是一個數組,然後將查詢沒有返回任何結果。 –

+0

我在您的查詢中看不到任何語法錯誤,所以我認爲最可能的解釋是'$ _SESSION ['user'] ['id']'未設置爲在用戶中具有匹配的id '表。 –

+0

如果您不確定查詢是否返回任何內容,請嘗試'while($ userRow = mysqli_fetch_array($ userQuery)){/ * ... * /}'而不是使用'each()'。 – Mike

回答

0

爲什麼不直接使用

foreach($userRow as $key => $value) 

它看起來像你的查詢可能會返回null。如果是這樣,也許你應該先檢查它是否爲空。

+1

Foreach iWill會產生相同的錯誤 –

0

這裏你既不需要也不需要每個foreach。

所有你需要的代碼只是

$_SESSION['user'] =mysqli_fetch_assoc($userQuery);