【问题标题】:php while loop in an elseif, infinite return of first rowphp while循环在elseif中,第一行无限返回
【发布时间】:2014-10-05 22:45:39
【问题描述】:

所以我在 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

【问题讨论】:

  • while 循环的每次迭代中获取:while ($row=mysqli_fetch_array($result,MYSQLI_ASSOC)) { ... }

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


【解决方案1】:

Cheruvian 和 Philipp Murray 所说的。

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

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

此代码 sn-p 有效,因为mysql_fetch_assoc 增量迭代记录集并在完成所有记录后返回null,从而结束while 条件。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      试试这样的:

      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 结束

      【讨论】:

        猜你喜欢
        • 2017-11-09
        • 2023-03-16
        • 1970-01-01
        • 2018-07-11
        • 2014-05-30
        • 1970-01-01
        • 2011-11-19
        • 2017-11-27
        • 1970-01-01
        相关资源
        最近更新 更多