我对PHP开发很陌生,但我想我会快速地接受它,但是当我从XAMPP迁移到IAMPP时,我遇到了一些问题。一个真正的主人。我试图做这样的事情。
$cast_list = mysqli_query($dblink, $sql);
foreach ($cast_list as $role)
{
echo "<tr><td width='50%'>".$role['appeared_as']."</td>";
}
它适用于我在家用电脑上安装的XAMPP,但它不能用于我安排测试的主机。实际的查询工作正常,所以不是问题。我可以在XAMPP上的PHPMyAdmin中看到正确的结果,当我按如下方式更改代码时。
$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
为我正常工作的合理原因?
答案 0 :(得分:4)
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不适用。
在PHP 5.4中,mysqli_result资源添加了Iterator
功能,您实际上可以在foreach()
中使用它。但是您的主机显然使用的是旧版本的PHP。
最佳做法是使用您将部署的所有软件的相同版本进行开发,这样您就不会受到这种惊喜。