mysql_fetch_array不会遍历所有结果

时间:2014-04-16 21:04:54

标签: php mysql

首先,我知道我们必须摆脱折旧的php mysql函数并转移到mysqli或PDO。然而,这种转变将不会在这里发生几周,我需要像ASAP一样工作。

基本上,我的代码在我们的旧服务器上运行正常(PHP 5.2.13),以及在我们的新服务器上的较小查询(PHP 5.4.20),但对于较大的查询,只返回部分记录集和然后......我想死吗?它死在什么记录取决于查询,但它几乎总是在记录10k到15k的范围内死亡。我怀疑它正在死亡,因为某种设置极限或某种东西的php.ini设置,但我不知道它会是什么。我已经将代码简化为基本要素:

$query = $my_query;
$result = mysql_query($query) or die(mysql_error());
$record_count = mysql_num_rows($result);

echo "Query has returned " . $record_count . " records.<br>";

$y=0;
while($row=mysql_fetch_array($result, MYSQL_ASSOC))
{
    echo "START";
    echo $y . " ";
    foreach($row as $key => $value)
    { echo $value . " "; }
    $y=$y+1;

    echo "END" . "<br>";
}
echo "GOT OUT OF THERE!";

所以是的,record_count将回显查询返回大约250k记录,但是在循环中它基本上会在10-15k记录之间进行,回显最后的“END”,但是循环只是明显停止。它没有回到下一个“开始”,也没有到达“GOT OUT OF THERE!”同样,这个相同的代码在我们的旧服务器上运行良好,在我们的新服务器上运行较小的查询。

任何人都有任何想法是什么问题?

1 个答案:

答案 0 :(得分:2)

它可能刚刚超时。您可以通过添加以下行来覆盖单个脚本的服务器默认超时设置:

set_time_limit(0);

这将允许脚本永远运行。如果要设置不同的时间限制,则参数以秒为单位,因此,例如,这将允许脚本运行5分钟:

set_time_limit(300);