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().

另外,请注意mysqlline of functions 已被弃用,社区鼓励使用MySQLiPDO_MySQLline of functions。

于 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

尝试使用mysql_num_rows(),这样您就不必重复$result两次,这会在第二个循环中给您错误,因为您必须重置结果指针。所以这样做只迭代一次:

//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-中的红色框行数.php

于 2012-10-02T13:35:53.733 回答
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 回答