我试图使用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());
}
答案 0 :(得分:1)
MySQL不会在字段中返回数组,索引从查询中检索的数组将返回单个字段,而foreach()
需要一个数组。你写的东西不行。使用while()
循环来迭代查询结果,就像通常那样。
答案 1 :(得分:1)
foreach需要一个数组,也许你没有从查询中获取数组。在函数in_array中添加do var_dump,当它不是一个数组时,看看发生了什么。
答案 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
}
}