while($ row = mysql_fetch_array($ result)) - 正在执行多少循环?

时间:2010-06-04 12:22:18

标签: php mysql

如果...

$query = "SELECT col1,col2,col3 FROM table WHERE id > 100"
$result = mysql_query($query);

此操作:

while ($row = mysql_fetch_array($result)){
   ....
}

这是做1循环(迭代x次)?

并为此:

$row = mysql_fetch_array($result)
foreach($row as $r){
   ...
}

这是做2个循环(迭代x次)?

其中x是结果数


编辑:

好的,谢谢你们,好吧我基本上把这个问题说得非常非常糟糕。

回想起来应该是

  

'mysql_fetch_array()只返回一个   每次被称为'

时排

我很高兴我对mysql_fetch_array()的理解是不正确的!

谢谢你的时间!

7 个答案:

答案 0 :(得分:21)

  

我假设mysql_fetch_array()perfroms一个循环,所以我对如果使用while()与它一起感兴趣,如果它保存了一个嵌套循环。

没有。 mysql_fetch_array只返回结果的下一行并前进内部指针。它不循环。 (在内部它可能会或可能不会在某处使用某个循环,但这是无关紧要的。)

while ($row = mysql_fetch_array($result)) {
   ...
}

执行以下操作:

  1. mysql_fetch_array检索并返回下一行
  2. 该行已分配到$row
  3. 计算表达式,如果计算结果为true,则执行循环内容
  4. 程序重新开始
  5. $row = mysql_fetch_array($result);
    foreach($row as $r) {
        ...
    }
    

    执行以下操作:

    1. mysql_fetch_array检索并返回下一行
    2. 该行已分配到$row
    3. foreach遍历数组的内容并执行循环内容的次数与数组中的项目一样多次
    4. 在这两种情况下mysql_fetch_array完全相同。你只有你编写的循环数。但是这两种结构都没有做同样的事情。第二行只会对结果的一行起作用,而第一行会遍历所有行。

答案 1 :(得分:1)

这取决于$results中返回的行数,以及$row中有多少列?

答案 2 :(得分:1)

考虑到只返回一行,在这两种情况下只会完成一个循环。虽然它会检查循环进入条件两次。

答案 3 :(得分:1)

对于第一个:您的程序将对查询返回的结果集中的每一行进行一次循环。您可以使用mysql_num_rows()预先知道有多少结果。

对于第二个:这次您只使用结果集的一行,并且您正在为每个执行某些操作。这就是foreach语言构造的作用:它遍历数组$row中每个条目的循环体。程序将通过循环的次数是可以预先知道的:它将对结果集中的每一列进行一次(可能你知道,但如果你需要确定它,你可以使用count($row)

答案 4 :(得分:1)

第一行:

$result = mysql_query($query);  

返回php db资源。

第二行

while ($row = mysql_fetch_array($result))  

循环查询返回的所有记录。

使用mysql_fetch_assoc代替
在这种情况下,该行具有key =>值对 在这之前就说出来了:
print_r($row)你会明白的 如果使用mysql_fetch_assoc,则行的格式为:

$row["column1_name"] = column1_value;  
$row["column2_name"] = column2_value;  

对于这个:

$row = mysql_fetch_assoc($result)  
foreach ($row as $columnName => $columnValue) {  
    ...  
}  

您将从查询中获取第一行,并将迭代查询的第一个结果中的所有列。

答案 5 :(得分:1)

$query = "SELECT col1,col2,col3 FROM table WHERE id > 100"
$result = mysql_query($query);
if(mysql_num_rows($result)>0)
{
 while($row = mysql_fetch_array()) //here you can use many functions such as mysql_fetch_assoc() and other
 {
//It returns 1 row to your variable that becomes array and automatically go to the next result string
  Echo $row['col1']."|".Echo $row['col2']."|".Echo $row['col2'];
 }
}

答案 6 :(得分:1)

是的,mysql_fetch_array()只返回一个结果。如果要检索多行,则需要将函数调用放在while循环中。

两个例子:

这只会返回第一行

$row = mysql_fetch_array($result);

这将在每个循环上返回一行,直到结果集中没有更多行可用

while($row = mysql_fetch_array($result))
{
    //Do stuff with contents of $row
}