foreach()的问题提供的参数无效

时间:2011-06-05 22:01:51

标签: php mysql foreach

我试图使用PHP从数组中删除每个关注者。但是我收到错误:

Warning: Invalid argument supplied for foreach() in /home/nucleusi/public_html/maxkdevelopment.co.uk/SocialPic/socialPic.php

请告诉我我哪里出错了?

$arg = mysql_query("SELECT `followerUserID` FROM Following 
   WHERE `followingUserID` = '$id'") or die("1. " . mysql_error());
$array = mysql_fetch_array($arg);
foreach($array['followerUserID'] as $accID) {
  mysql_query("UPDATE Accounts SET `Following Count` = (`Following Count`-1) 
    WHERE `id` = '$accID'") or die("2. " . mysql_error());
}
$arg = mysql_query("SELECT `followingUserID` FROM Following 
  WHERE `followerUserID` = '$id'") or die("3. " . mysql_error());
$array = mysql_fetch_array($arg);
foreach($array['followingUserID'] as $accID) {
  mysql_query("UPDATE Accounts SET `Followed Count` = (`Followed Count`-1) 
    WHERE `id` = '$accID'") or die("4. " . mysql_error());
}

5 个答案:

答案 0 :(得分:1)

MySQL不会在字段中返回数组,索引从查询中检索的数组将返回单个字段,而foreach()需要一个数组。你写的东西不行。使用while()循环来迭代查询结果,就像通常那样。

答案 1 :(得分:1)

foreach需要一个数组,也许你没有从查询中获取数组。在函数in_array中添加do var_dump,当它不是一个数组时,看看发生了什么。

http://php.net/manual/en/function.is-array.php

答案 2 :(得分:1)


while ($row = mysql_fetch_array($arg)) 
{

}

答案 3 :(得分:0)

您可以一次完成此查询而无需foreach循环:

第一个可以压缩成:

UPDATE Accounts SET `Following Count` = (`Following Count`-1) 
INNER JOIN Following f ON (f.followingUserID = accounts.id)
WHERE F.followingUserId = '$id'

第二个也是。

UPDATE Accounts SET `Followed Count` = (`Followed Count`-1) 
INNER JOIN Following f ON (f.followingUserID = accounts.id)
WHERE F.followerUserId = '$id'

现在你不再需要那个循环了。

答案 4 :(得分:0)

这个问题经常是因为数组为空而引起的。 例如数组中没有项目,因此当你执行foreach时,服务器无法处理任何内容并返回错误。

你可以做的是先检查阵列是否为空,然后如果你知道你的阵列中至少有一个项目就行了。

像这样:

if(empty($yourArray))
{echo"<p>There's nothing in the array.....</p>";}
else
{
foreach ($yourArray as $current_array_item)
{
//do something with the current array item here
} 
}