2010-08-13 64 views
0

我有一个约450,000行的表。该表需要更新一些派生字段。PHP无法完成循环

我的循环是:

$sql = "SELECT * FROM table_name"; 
if (!($r = @ mysql_query($sql, $db_connection))) die("Mysql query $sql . Error " . mysql_errno() . " : " . mysql_error()); 
while ($row = mysql_fetch_assoc($r)) 
{ 
    // do a number of calculations, which create some $sql to update the record 
$sql .= " WHERE p_id = $id"; // $id is the records id 
if (!($result = @ mysql_query($sql, $db_connection))) die("Mysql query $sql . Error " . mysql_errno() . " : " . mysql_error()); 
} 

此代码不是通过所有的记录得到。 php脚本在网页中被调用,并且网页不响应。当我查看桌面时,它已经更新了大约60,000个,其余的记录都没有发现。

这用于正常工作,但由于我将Ubuntu升级到最新版本,因此发生这种情况。我试图在php.ini中增加内存,但那没有奏效。

想法任何人?

回答

1

你可能会碰到PHP最大执行时间max_execution_time参数。要查看是否属于这种情况,请查看Web服务器日志文件。寻找这样的事情在最后:

PHP Fatal error: Maximum execution time of 30 seconds exceeded in ...

如果是这样的话,你可以编辑你的php.ini有一个较长的超时:

max_execution_time = 9999

如果不是它,服务器日志可能仍然能够告诉你脚本停止的原因。

+0

是的,修复它,谢谢 – P0rridge 2010-08-13 06:00:38

0

您还应该增加php.ini中的执行时间限制。问题可能是您的脚本运行时间太长。

+0

是的,修复它,谢谢 – P0rridge 2010-08-13 06:01:02

1

您可能需要增加页面的时间限制,通过使用set_time_limit($seconds);或在php.ini

+0

我认为这是它,因为OP提到已经增加了php.ini中的内存。 +1 – karim79 2010-08-13 05:39:59

+0

是的,修复它,谢谢 – P0rridge 2010-08-13 06:01:30