2016-04-25 115 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);