2011-11-29 101 views
-2

所以我試圖運行這個循環:30秒超時PHP - 致命錯誤

while ($serv = mysql_query("select serv_desc from service where serv_id='".$service."'")) { 
    $serv_desc = $serv['serv_desc']; 
} 

serv_id只是一個數字。

$service$_POST

serv_desc一些是服務的描述 - 或許是一兩句話。

爲什麼它保持超時?

Fatal error: Maximum execution time of 30 seconds exceeded in C:\wamp\www\globaldetroit\display.php on line 18 

回答

4

這是一個無限循環!你會反覆執行查詢。

試試這個:

// Added intval() to prevent SQL injection and standardized variable names ($result) 
$sql = "select serv_desc from service where serv_id='" . intval($service) . "'"; 
$result = mysql_query($sql); 
$serv_desc = array(); 
while ($row = mysql_fetch_assoc($result)) 
{ 
    $serv_desc[] = $row['serv_desc']; 
} 
+0

你可能想要'mysql_fetch_assoc'而不是 - 它稍微快一點。 –

+0

@TomvanderWoerdt - 更新,謝謝!只是好奇,你怎麼知道這是更快/多少?是因爲'mysql_fetch_array'返回一個數字和關聯索引數組,而'mysql_fetch_assoc'是嚴格關聯的嗎? – nickb

+0

是的,這就是原因。時間差異非常小,但是如果您從數據庫中獲得50KB BLOB字段(如圖像),則它會佔用兩倍的內存量,這可能是主要區別。 –

2

你的代碼讀取這樣的:

我可以創建一個新的查詢?如果我能再次做到這一點

你應該做這樣的(我還添加了對SQL注入防護):

$query = mysql_query("select serv_desc from service where serv_id='".mysql_real_escape_string($service)."'"); 
while ($serv = mysql_fetch_assoc($query)) { 
    $serv_desc = $serv['serv_desc']; 
} 
+0

你說得很對,我今天很蠢!我知道這個。看了這個顯示界面後連續兩天疲倦的眼睛! –

+1

你應該嘗試rubberducking,它真棒! –

+0

+1 [rubberducking](http://en.wikipedia.org/wiki/Rubber_duck_debugging) –

0

也許是因爲我是一個無限循環的原因的mysql_query總是返回資源。 改爲嘗試此操作。

$servRes = mysql_query("select serv_desc from service where serv_id='".$service."'"); 
while ($serv = mysql_fetch_array($servRes, MYSQL_ASSOC)) { 
    $serv_desc = $serv['serv_desc']; 
} 

它的工作原理,但是當你只有一個創紀錄的走線槽我想使它不while循環。那就不需要了。

+0

不正確,當失敗時(即不是資源),mysql_query將返回false。 – nickb

+0

我知道,但它總是返回資源。否則,它不會是無限循環。 –