我正在进行分页,由于某种原因,我不能使用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函数来获取数据库中的行数据吗?
谢谢!
答案 0 :(得分:8)
这是错误
while ($row = mysql_fetch_array($result)) {
$total_images++;
}
一旦你获取数组,数组指针就会设置到最后。
使用此
$total_images=mysql_num_rows($result);
和
$images_to_offset=mysql_num_rows($result);
OR
重置指针的位置使用mysql_data_seek()
。它移动内部结果指针
答案 1 :(得分:4)
如果您希望在获取后从头开始提取,则需要使用mysql_data_seek()
。
另请注意,mysql
函数系列为deprecated,社区鼓励使用而不是MySQLi
或PDO_MySQL
行功能。
答案 2 :(得分:2)
您可以使用mysql_data_seek
将指针指回第一行。
mysql_data_seek($result, 0);
另见:http://ca2.php.net/manual/en/function.mysql-data-seek.php
答案 3 :(得分: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-num-rows.php中的红框
答案 4 :(得分:1)
你只能循环遍历结果数组一次,之后它们会有效地“消失”。多次循环结果的方法是在第一个循环中将它们存储到一个新数组中,然后根据需要循环遍历新数组...
答案 5 :(得分: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;
答案 6 :(得分:1)
mysql_fetch_array
不仅返回与获取的行对应的数组,还将内部数据指针向前移动。
有多种方法可以解决这个问题,最明显的是将结果“停放”在数组中,然后从那里开始工作。或者查询2次。或者使用mysql_data_seek
。在你的情况下,也许mysql_num_rows
更合适,因为你的代码表明你只想知道你需要迭代多少行,这就是这个函数的用途。
无论做出什么决定,请记住不鼓励使用mysql扩展。相反,应该使用MySQLi或PDO_MySQL扩展。