首先,我知道我们必须摆脱折旧的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!”同样,这个相同的代码在我们的旧服务器上运行良好,在我们的新服务器上运行较小的查询。
任何人都有任何想法是什么问题?
答案 0 :(得分:2)
它可能刚刚超时。您可以通过添加以下行来覆盖单个脚本的服务器默认超时设置:
set_time_limit(0);
这将允许脚本永远运行。如果要设置不同的时间限制,则参数以秒为单位,因此,例如,这将允许脚本运行5分钟:
set_time_limit(300);