好的,所以我知道什么时候这样做:
//connection code;
//query code;
//$result= mysqli_query();
$row= mysqli_fetch_array($result);
创建一个关联数组,其中表中的列名是相应行中数据的键。
然后你可以使用:
while ($row= mysqli_fetch_array($result))
{
//code to echo out table data.
}
我的问题是while循环在每次迭代后如何进入下一行?我以为那是foreach循环的用途?
答案 0 :(得分:4)
来自http://www.php.net/manual/en/function.mysql-fetch-array.php
数组mysql_fetch_array(resource $ result [,int $ result_type = MYSQL_BOTH]) 返回与获取的行对应的数组,并将内部数据指针向前移动。
答案 1 :(得分:1)
返回结果集的许多函数通过返回一个可以像以前一样foreach()
开启的数组来实现。但情况并非总是如此,特别是对于数据库功能。 mysqli_fetch_array
只获取一行,如果没有剩余,则返回布尔值false
。这就是循环的工作方式:只要有要处理的行,表达式的计算结果为true
。
这种结构的原因主要是效率。获取数据库行可能是性能关键操作,并且在某些情况下不需要所有行。在这些情况下,这种方法将提供更多灵活性。逐行获取行也更加内存友好,因为并非所有结果数据都必须立即加载到内存中。
Mysqli实际上有一个函数可以获取数组中的整个结果集:mysqli_fetch_all
。您可以foreach()
完成此任务。
答案 2 :(得分:1)
mysql_fetch_array只是从mysql查询中获取结果集的下一行,并将该行作为数组返回,如果没有其他行可以获取,则返回false。
while循环不断地从结果集中拉出结果,一直持续到mysql_fetch_array为假。
foreach循环遍历数组的每个值。由于mysql_fetch_array只提取一个结果,因此count($ row)的值每次都为1。
答案 3 :(得分:0)
此部分一次取一行
$row = mysqli_fetch_array($result);
将它放入while循环使它一次获取一行,直到它没有获取一行,因为没有更多的东西被提取。
替代方法是获取所有行,然后使用foreach
循环遍历它们$rows = mysql_fetch_all($result);
foreach($rows as $row){
// do something with row
}
为了实现这个目的,你必须让自己成为一个mysql_fetch_all
函数,当然它有原始的while循环...
function mysql_fetch_all($result)
{
$all = array();
while($thing = mysql_fetch_assoc($result)) {
$all[] = $thing;
}
return $all;
}
答案 4 :(得分:0)
这是因为SQL连接器在结果中存储了查询的当前状态(即要返回的下一个结果行)。
如果你想要一个类似的例子,它就像从文件中读取一样,你可以使用类似的结构:
while ($line = fgets($fp, 1000)) {
// ...
}
在幕后(并且取决于语言,解释器,编译器等)for
和while
本质上会产生相同的代码。不同的是,根据您的代码应该做什么,一种方法可能比另一种方法更具可读性。
以下面两个循环为例。两者都完全一样。
for ($i = 0; $i < 10; $i++) {
// ...
}
$i = 0;
while ($i < 10) {
// ...
$i++;
}
答案 5 :(得分:0)
每次while循环运行时,它都会执行函数mysql_fetch_array并获取下一个结果。它会这样做,直到没有更多的结果显示出来。
答案 6 :(得分:0)
mysql_fetch_array返回与获取的行对应的字符串数组,如果没有更多行,则返回FALSE。如果存在行则获取数据。
我希望这已经回答了你。很难理解你的意思