php while while循环,第一行无限返回

时间:2014-08-12 18:28:02

标签: php if-statement syntax while-loop infinite-loop

所以我在if语句中有一个while循环,它应该遍历数据库查询中的所有行并列出它们。但是,它只返回一个结果(第一个)并无限地列出它。我已经尝试了我能想到和看到的一切,我仍然得到无限循环。

if($result) {
    $row = mysqli_fetch_array($result, MYSQLI_ASSOC);
    $numrows = mysqli_num_rows($result);
    $custNum = $row['custNum'];
    $custName = $row['custName'];
    $trackNum = $row['newTrack'];
    $date = $row['pickUp'];

     // only one result        
     if  ( $numrows > 1 ) {

        echo '
           <table>
              <tr>
                 <td>' .$custName. '</td> 
              </tr>'; 

              while($row) {
              echo '
              <tr>
                 <td>' .$trackNum. '</td>
                 <td>' .$date. '</td>
              </tr>';
              };


           echo '</table>';

     } // end of if $numrows

  } // end of if $result

3 个答案:

答案 0 :(得分:1)

你需要在每个循环中迭代/获取。

尝试这样的事情:

if($result) {
$row = mysqli_fetch_array($result, MYSQLI_ASSOC);
$numrows = mysqli_num_rows($result);
$custNum = $row['custNum'];
$custName = $row['custName'];

 // only one result        
 if  ( $numrows > 1 ) {

    echo '
       <table>
          <tr>
             <td>' .$custName. '</td> 
          </tr>'; 

          while($row) {    
              $trackNum = $row['newTrack'];
              $date = $row['pickUp'];
              echo '
          <tr>
             <td>' .$trackNum. '</td>
             <td>' .$date. '</td>
          </tr>';
          $row = mysqli_fetch_array($result, MYSQLI_ASSOC);
          }


       echo '</table>';

 } // end of if $numrows

} //结果是$ result

答案 1 :(得分:1)

记住循环的作用:它执行从顶部(while(...))到底部的代码(在右括号之前的代码),然后重复它。 只要您在循环内部,就不会执行其他代码。现在,从数据库中获取数据的代码在哪里?它是之外的while循环,所以当你的while循环继续时它不会被执行。由于您希望在循环的每次迭代中获取新数据,因此必须在循环中包含fetch语句

答案 2 :(得分:1)

Cheruvian和Philipp Murray说道。

更具体地说,只要条件保持为真,while进程就会处理。原始代码中的$ row建立一次,当设置时,保持设置且不会更改,因此无限期保持为真。这被称为无限循环。

while ($row = mysql_fetch_assoc($result)){
    // execute logic here
} 

此代码段有效,因为mysql_fetch_assoc以递增方式迭代记录集,并在完成所有记录后返回null,从而结束while条件。