2013-03-27 132 views
0

当我将下面的函数添加到我的PHP页面时,它会超时尝试执行脚本。它出什么问题了?PHP脚本需要太长时间并且超时

include ('config.php'); 

function GenerateTransID() {  
    $unique_ref_length = 9; 
    $unique_ref_found = false; 
    $possible_chars = "23456789BCDFGHJKMNPQRSTVWXYZ"; 
    while (!$unique_ref_found) { 
     $unique_ref = ""; 
     $i = 0; 
     while ($i < $unique_ref_length) { 
      $char = substr($possible_chars, mt_rand(0, strlen($possible_chars)-1), 1); 
      $unique_ref .= $char; 
      $i++; 
     } 

     $tmp_id = "TR-" . $unique_ref; 
     $unique_ref = $tmp_id; 
     $query = "SELECT `transactionID` FROM `payment` WHERE `transactionID`='$unique_ref'"; 
     $result = mysql_query($query) or die(mysql_error().' '.$query); 

     if (mysql_num_rows($result)==0) { 
      $unique_ref_found = true; 

     } 

    } 
    return $unique_ref;   
} 

回答

0

更改为以下: -

function GenerateTransID() {  
    $unique_ref_length = 9; 
    $unique_ref_found = false; 
    $possible_chars = "23456789BCDFGHJKMNPQRSTVWXYZ"; 
    while (!$unique_ref_found) { 
     $unique_ref = ""; 
     for($i = 0; $i < $unique_ref_length; $i++) { 
      $char = substr($possible_chars, mt_rand(0, strlen($possible_chars)-1), 1); 
      $unique_ref .= $char; 
     } 

     $tmp_id = "TR-" . $unique_ref; 
     $unique_ref = $tmp_id; 
     $query = "SELECT `transactionID` FROM `payment` WHERE `transactionID`='$unique_ref'"; 
     $result = mysql_query($query) or die(mysql_error().' '.$query); 

     if(mysql_num_rows($result)==0) 
     { 
      $unique_ref_found = true; 
     } 
    } 
    return $unique_ref; 
} 

提出了一些代码的改进。除此之外,该功能应该按预期工作。您有另一个与此代码无关的问题,很可能是由于其他代码或数据库连接。

+0

这应该做到! – 2013-03-27 11:37:32

+0

你所做的一切都是从一段时间变为一段时间,也不能解决问题。虽然我确实同意,for会对他更好。 – fredrik 2013-03-27 11:38:46

+0

@fredrik执行该函数,它将返回一个有效的事务ID,只是要确保注释掉唯一的ID db检查部分 – 2013-03-27 11:40:28

1

该函数将只返回如果mysql_num_rows($result) == 0,这可能不是节目超时之前发生。

尝试添加一个回显,看看它是否被执行。如果我是你,我会看看生成GUID。

+0

是的,或把'return $ unique_ref;'放到'while'范围内 – seeker 2013-03-27 11:33:12

+0

他也可以做​​到这一点 - 但是如果他从来没有进入关键的if,那没关系... – fredrik 2013-03-27 11:34:40

+0

也许我误解了你,但是如果你那么函数将返回结果并且不会导致无限循环 – seeker 2013-03-27 11:40:13

相关问题