1

次のように、同じページのデータベースから 2 つのレコードのリストを作成しようとしています。

<?php do {   ?>
<tr>
<td><?php echo $row['name']; ?></td>
<td><?php echo $row['email']; ?></td>
</tr>
<?php } while ($row = mysql_fetch_assoc($result)); ?>

<?php do {   ?>
<div>
<h1><?php echo $row['name']; ?></h1>
<p><?php echo $row['email']; ?></p>
</div>
<?php } while ($row = mysql_fetch_assoc($result)); ?>

最初のループは問題なく動作しますが、2 回目 (div の作成) の do-while ループはデータを返しません。これを修正するにはどうすればよいですか?

4

3 に答える 3

2

2 つのループの間にa を挿入しmysql_data_seek($result, 0);て結果をリセットし、もう一度読み取れるようにします。

クエリが行を返さなかったmysql_data_seek場合、警告が表示されることに注意してください。使用する前に、行が返されたかどうかを確認してください。

また、ループが逆になっていることに注意してください。取得してから表示する必要があります。:P そうしないと、各ループの最初の反復で空の行が吐き出されます。while (...) { }ではなく使用しdo { } while (...)ます。

(また、注意してください、mysql_queryがらくたです。使用を中止してください。お願いします。 念のため。mysqli 拡張機能は同じことを行い、ほぼ同じように動作し、mysql とは異なり、積極的に保守されています。プリペアド ステートメントの使用方法を学習するには (プリペアド ステートメントの使用方法を学習する必要があります)、mysqli にはそれらがあります。)

于 2012-11-25T04:16:53.997 に答える
0

mysql_fetch_assoc は、フェッチされた行に対応する連想配列を返し、内部データ ポインタを前方に移動します。つまり、取得した行を削除します。2 回目の繰り返しでは、行が見つかりません。

これはうまくいくはずですが、最善の方法ではないかもしれません (私はずっと db クラスを使用してきました)。

$result2 = $result;

イテレーション 2 での使用mysql_fetch_assoc($result2);

于 2012-11-25T04:17:38.837 に答える
0

$result、eg$result1およびに異なる変数命名を使用してみてください$result2

于 2012-11-25T04:15:48.650 に答える