0

我试图阻止下表中的数据继续重复自身,例如循环相同的数据,使浏览器崩溃:

这是查询:

$posts = mysqli_fetch_assoc(mysqli_query($db, "SELECT * from tbl_bugresponse WHERE bugid = $id ORDER BY time")); 

这是表格代码:

<table width="100%" class="tborder">
    <tr>
        <th class="tcat">Name</th>
        <th class="tcat">Reply</th>
    </tr>
    <?php
        $colour="1";
        while($posts) {
            if($colour == "1"){
                 echo ("<tr class='alt1'>");
                 $f1 = $posts['by'];
                 $f2 = $posts['content'];
                 $colour = "2";
            }
            else {
                 echo "<tr class='alt2'>";
                 $f1 = $posts['by'];
                 $f2 = $posts['content'];
                 $colour = "1";
            }
            ?>
            <td><?php echo $f1; ?></td>
            <td><?php echo $f2; ?></td>
        </tr>
        <?}?>
</table>

请注意,我使用的是 mysqli 而不是 mysql。

4

2 回答 2

4

问题是while($posts){线路。

你正在编写代码,上面写着“继续运行,直到有人将帖子变量设置为 null 或 false”,但是你永远不会碰它......所以它会永远持续下去。

更新

再次查看您的查询,您似乎对它应该如何工作感到困惑。它应该是这样的:

$result = mysqli_query($db, "SELECT * from tbl_bugresponse WHERE bugid = $id ORDER BY time");
...
$post = mysql_fetch_assoc($result); // fetch first row
while( $post ) { // will keep going until $post gets set to null or false
  ...
  $post = mysql_fetch_assoc($result); // fetch next row and re-run the loop
}

您会注意到mysqli_query呼叫已被分离出来。什么mysqli_query是运行数据库查询,然后为您提供从查询返回的行列表的“句柄”。这是一个常见的混淆点,因为大多数人希望它给他们一个包含所有行的数组,而不是一个“句柄”。

然后,您必须调用mysql_fetch_assoc以将第一行从列表中取出,对其进行处理,然后mysql_fetch_assoc再次重复调用以获取下一行。

当它用完行时,mysql_fetch_assoc将返回null而不是有效行,因此您可以检查以查看何时完成并停止循环。

于 2009-06-08T21:27:01.503 回答
4

您没有在结果集中取得进展。mysqli_query 获取您的结果集,并且 mysqli_fetch_assoc 通过它进行处理。你需要这样的东西:

$results = mysqli_query($db, "SELECT * from tbl_bugresponse WHERE bugid = $id ORDER BY time");
while ($posts = mysqli_fetch_assoc($results)) {
    // table construction code goes here
}
于 2009-06-08T21:28:01.173 回答