2009-06-08 79 views
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

您没有完成结果集。 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 
} 
4

问题是while($posts){行。

你正在写代码说:“继续下去,直到有人把帖子变量设置为空或者假”,但你永远不会碰它......所以它会一直持续下去。

更新

只好再看看你的查询,它看起来像你有困惑,它是如何工作的。下面是它应该是什么样子:

$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而不是有效行,因此,您可以检查完成时间并停止循环。

+0

我会如何把该代码? – bear 2009-06-08 21:29:12