6

ページネーションに取り組んでいますが、何らかの理由で mysql_fetch_array を使用して結果を複数回ループすることができません。

//both $page and $imagesPerPage != 0
$offset = $page * $imagesPerPage
while ($row = mysql_fetch_array($result)) {
   $total_images++;
}
echo $total_images;
//echos correct amount
$row = null;


$images_to_offset = 0;
while ($row = mysql_fetch_array($result) && $images_to_offset < $offset) {
   $images_to_offset++;
}
echo $images_to_offset;
//echos 0... which is wrong

データベースの行データを取得するために別の php 関数を使用する必要がありますか?

ありがとう!

4

7 に答える 7

8

これがエラーです

while ($row = mysql_fetch_array($result)) {
   $total_images++;
}

配列をフェッチすると、配列ポインターが最後に設定されます。

これを使って

 $total_images=mysql_num_rows($result);

$images_to_offset=mysql_num_rows($result);

また

ポインターの位置をリセットするには を使用しmysql_data_seek()ます。内部結果ポインタを移動します

于 2012-10-02T13:33:35.997 に答える
4

すでにフェッチした後に最初からフェッチを開始する場合は、 を使用する必要がありますmysql_data_seek()

mysqlまた、関数の行は非推奨になっていることに注意してください。コミュニティは、MySQLiまたはPDO_MySQL関数の行の代わりに使用することを奨励しています。

于 2012-10-02T13:35:51.527 に答える
2

でポインタを最初の行に戻すことができますmysql_data_seek

mysql_data_seek($result, 0); 

参照: http://ca2.php.net/manual/en/function.mysql-data-seek.php

于 2012-10-02T13:36:00.720 に答える
1

を使用してみてください。結果ポインターをリセットする必要があるため、2 回目のループでエラーが発生している 2 回mysql_num_rows()反復する必要はありません。$resultしたがって、1回だけ反復する次のようにします。

//both $page and $imagesPerPage != 0
$offset = $page * $imagesPerPage
$total_images = mysql_num_rows($result);
echo $total_images;
//echos correct amount
$row = null;


$images_to_offset = 0;
while ($row = mysql_fetch_array($result) && $images_to_offset < $offset) {
   $images_to_offset++;
}
echo $images_to_offset;

補足として、使用しているインターフェイスが非推奨になったため、MySQLi または PDO_MySQL に移行して mysql にアクセスするようにしてください。http://es.php.net/manual/en/function.mysql- の赤いボックスを参照してください。 num-rows.php

于 2012-10-02T13:35:53.733 に答える
1

結果配列を 1 回だけループできます。その後、それらは効果的に「消えます」。結果を複数回ループする方法は、最初のループ中にそれらを新しい配列に格納し、次に新しい配列を必要な回数だけループすることです...

于 2012-10-02T13:36:10.427 に答える
1

mysql_data_seek関数を使用して、配列を「巻き戻す」必要があります。

$offset = $page * $imagesPerPage
while ($row = mysql_fetch_array($result)) {
   $total_images++;
}
echo $total_images;
//echos correct amount
$row = null;

mysql_data_seek(); // <-- rewind to the beginning

$images_to_offset = 0;
while ($row = mysql_fetch_array($result) && $images_to_offset < $offset) {
   $images_to_offset++;
}
echo $images_to_offset;
于 2012-10-02T13:36:40.010 に答える
1

mysql_fetch_arrayフェッチされた行に対応する配列を返すだけでなく、内部データ ポインターも先に移動します。

これに対処する方法は複数ありますが、最も明白なのは、結果を配列自体に「パーク」してから、そこから作業することです。またはクエリを 2 回実行します。または使用しますmysql_data_seek。あなたの場合、mysql_num_rowsあなたのコードは、反復する必要がある行数だけを知りたいことを示しているため、より適切である可能性があり、それがこの関数の目的です。

いずれにせよ、mysql 拡張機能の使用は推奨されないことに注意してください。代わりに、MySQLi または PDO_MySQL 拡張機能を使用する必要があります。

于 2012-10-02T13:37:23.303 に答える