2010-08-13 99 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