2011-11-29 100 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

我知道,但它总是返回资源。否则,它不会是无限循环。 –