2012-03-18 44 views
3

好了,所以我知道,做的时候:使用,而不是一个foreach循环,而用myslqli_fetch_array()

//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循环的目的?

+1

请注意['PDOStatement'](http://php.net/PDOStatement)支持['Traversable'](http://php.net/Traversable)接口,所以它可以在'foreach'直接循环,不像mysqli结果。 – outis 2012-03-18 09:51:13

+2

from PHP5.4'mysqli_query'返回['mysql_result'对象](http://www.php.net/manual/en/class.mysqli-result.php)它是[Traversable](http:// www .php.net/manual/en/class.traversable.php),所以使用'foreach'也可以。 – 2012-03-18 09:55:28

回答

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; 
} 
0

由于SQL连接器在结果中存储了查询的当前状态(即返回的下一个结果行),因此这样工作。

如果你想有一个类似的例子,它的工作原理是从文件中读取,在那里你可以使用类似的结构:

while ($line = fgets($fp, 1000)) { 
    // ... 
} 

在幕后(和依赖于语言,解释器,编译器,等等)forwhile本质上导致相同的代码。区别在于,根据您的代码应该执行的操作,一种方法比另一种方法更具可读性。

以下面的两个循环为例。两者完全一样。

返回结果集
for ($i = 0; $i < 10; $i++) { 
    // ... 
} 

$i = 0; 
while ($i < 10) { 
    // ... 
    $i++; 
} 
+1

这不是PHP,而是MySQL客户端库。 – glglgl 2012-03-18 10:02:21

+0

它通过了?好吧,以为MySQL(或任何库被使用)认为是。但是,它会再次使用通用调用。采取的点。 – Mario 2012-03-18 10:04:03

1

许多功能通过返回一个数组,你可以像你用来做foreach()这样做。但情况并非总是如此,特别是对于数据库功能。 mysqli_fetch_array只提取一行,或者返回布尔值false,如果没有更多剩余的。这就是循环的工作原理:只要有一行要处理,表达式的计算结果就是true

这种结构的原因主要是效率。获取数据库行可以是性能关键操作,并且在某些情况下不需要所有行。在这些情况下,这种方法会给予更多的灵活性由于并不是所有的结果数据都必须一次加载到内存中,因此一个接一个地获取行也更易于记忆。

Mysqli实际上有一个函数可以获取数组中的整个结果集:mysqli_fetch_all。你将可以通过foreach()

0

每次while循环运行时,它都会执行函数mysql_fetch_array并获取下一个结果。它是这样做的,直到没有更多的结果显示。

0

mysql_fetch_array返回一个对应于所提取行的字符串数组,或者如果没有更多行,则返回FALSE。如果行存在,则获取数据。

我希望这已经回答你q。它很难理解你的意思

1

mysql_fetch_array只是从你的mysql查询中获取结果集的下一行,并将该行作为数组返回,或者如果没有更多行要获取,则返回false。

while循环不断从结果集中一次一个地提取结果,并一直持续到mysql_fetch_array为止。

foreach循环遍历数组的每个值。由于mysql_fetch_array只能提取一个结果,因此count($ row)的值每次都是1。

相关问题