[英]Stop continuous table generation
我试图阻止下表中的数据继续重复自身,就像在循环访问相同数据时一样,导致浏览器崩溃:
这是查询:
$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。
问题是while($posts){
行。
您正在编写代码,上面写着“继续前进,直到有人将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
而不是有效行,因此您可以通过这种方式查看完成的时间并停止循环。
您并没有完成结果集。 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
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.