2013-03-27 111 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

相關問題