Php 当指针正好位于mysql\u num\u行的1/2时,mysql\u fetch\u数组返回false

Php 当指针正好位于mysql\u num\u行的1/2时,mysql\u fetch\u数组返回false,php,mysql,Php,Mysql,该表大约有120万行(它在不断上升,所以在本次测试的迭代之间,总行数略有增加,但这不会改变结果) mysql\u num\u rows在pull查询之后显示,这是准确的,用select count(*)测试,以显示结果集有多大 然后,循环将该行分配给一个具有mysql\u fetch\u array()的数组。迭代计数器在每一轮中递增,您可能希望它进入mysql\u num\u行,然后跳出while循环。相当标准的东西,已经做了一百万次了 另一方面,实际发生的事情很奇怪。它正好到达1/2的路径(

该表大约有120万行(它在不断上升,所以在本次测试的迭代之间,总行数略有增加,但这不会改变结果)

mysql\u num\u rows在pull查询之后显示,这是准确的,用select count(*)测试,以显示结果集有多大

然后,循环将该行分配给一个具有mysql\u fetch\u array()的数组。迭代计数器在每一轮中递增,您可能希望它进入mysql\u num\u行,然后跳出while循环。相当标准的东西,已经做了一百万次了

另一方面,实际发生的事情很奇怪。它正好到达1/2的路径(楼层(行数/2)),然后mysql\u fetch\u array()返回false。无论您如何限制结果集

$iteration = 0;
$result = mysql_query("select `file_id`, `size` from `files`", $dbconn); // get all records
echo "\nDone. Found " . mysql_num_rows($result) . " rows."; // Done. Found 1291595 rows.
if ($result){
    while ($line = mysql_fetch_array($result) !== false){
         $iteration++;
    }
    echo "\ngot to $iteration before mysql_fetch_array was false."; // got to 642679 before mysql_fetch_array was false.
}
有时$line是空数组,有时mysql\u fetch\u数组触发器为false

它获取我期望的mysql_num_行,并继续1/2总结果集大小的记录,然后它停止

如果我现在输入limit=9673561000000,我得到:

Done. Found 324963 rows.
got to 162482 before mysql_fetch_array was false.
这距离正是1/2距离

限额=1000000,1000000:

Done. Found 292606 rows.
got to 146303 before mysql_fetch_array was false.
这到底是什么

php信息:

php-v PHP 5.4.19-1+debphp.org~precise+3(cli)(构建时间:2013年8月27日14:29:42)
版权所有(c)1997-2013 PHP组为了避免在PHP将
$line
的值解释为false的情况下提前终止while循环,请更改该行

while ($line = mysql_fetch_array($result)){

更新: 另一种可能是,非常大的结果集内存不足。尝试使用而不是

另一更新: 还有一种可能是,您在这个脚本中打开了多个数据库连接,
mysql\u query()
没有使用您认为它正在使用的数据库连接。传递可选的第2个参数以确保。改变

mysql_fetch_array($result)


对不起,伙计们,我很笨。我在while循环中有第二个$line=mysql\u fetch\u数组($result)。。。使它为每个循环抓取2行。新代码中的地址。

。它们不再得到维护,而是在使用。改为了解准备好的语句,并使用or。您在while循环之前在何处初始化了
$iteration
。请参阅php信息:折旧。。。它仍然生活在php5.4改变,同样的效果。。。限制为0,20时:完成。找到了20行。在创建mysql\u fetch\u数组之前已达到10false@tweak2:是否有更多代码可以显示。您的错误可能位于其他地方。内存没有多大意义,因为它正好是1/2。。。如果是记忆的话,我想每次的结果都差不多,而不是一半。
mysql_fetch_array($result)
mysql_fetch_array($result, $dbconn)