所以我在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
答案 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
条件。