我是PHP开发的新手,但我认为我学得很快,但当我从XAMPP转到真正的主机上时,我遇到了一个小问题。我正试着做这样的事情。
$cast_list = mysqli_query($dblink, $sql);
foreach ($cast_list as $role)
{
echo "<tr><td width='50%'>".$role['appeared_as']."</td>";
}它在XAMPP上工作,我已经安装在我的家庭PC上,但它不能在我安排测试的主机上工作。实际的查询运行良好,所以这不是问题所在。我可以在PHPMyAdmin中看到正确的结果,在XAMPP上,当我按如下方式修改代码时。
$cast_list = mysqli_query($dblink, $sql);
$y = mysqli_num_rows($cast_list);
for ($x = 0; $x <$y; $x++)
{
$role = mysqli_fetch_assoc($cast_list);
echo "<tr><td width='50%'>".$role['appeared_as']."</td>";
}第二个代码块将产生所需的效果。第一个代码块显然会迭代5次,但不会包含任何有意义的数据。实际上,第一个代码块的var_dump($role)表明它是NULL。
如果需要的话,我可以适应它,但也许有一个逻辑原因导致foreach不适合我?
发布于 2014-08-01 06:43:21
mysqli_query()不返回可以与foreach()一起使用的数组或数组对象。mysqli_query()的返回类型是一个资源。您可以在循环中从中获取数据,就像您的第二个解决方案一样。
使用while()比使用for()更简单:
$cast_list = mysqli_query($dblink, $sql);
while ($role = mysqli_fetch_assoc($cast_list)) {
echo "<tr><td width='50%'>".$role['appeared_as']."</td>";
}当在结果集的末尾提取的行为NULL时,循环将自动终止。在循环之前,您不需要知道行数。
请回复您的评论:
在looking up some facts之后,我不得不承认我上面的答案并不完全正确。或者对于某些版本的PHP来说不是真的。
在PHP5.4中,mysqli_result资源添加了Iterator功能,实际上你可以在foreach()中使用它。但是您的主机显然使用的是较旧版本的PHP。
最佳实践是在您将部署到的所有软件的相同版本上进行开发,这样您就不会遇到这种意外。
https://stackoverflow.com/questions/25070098
复制相似问题