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>

私はmysqlではなくmysqliを使用していることに注意してください。

4

2 に答える 2

4

問題は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れるので、終了したことを確認し、ループを停止することができます。

于 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 に答える