0

当我将下面的函数添加到我的 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;         
}
4

3 回答 3

1

该函数只会返回 if mysql_num_rows($result) == 0,这在程序超时之前可能不会发生。

尝试在 if 中添加一个 echo 以查看它是否被执行。如果我是你,我会看看生成 GUID。

于 2013-03-27T11:31:46.990 回答
0

可能是 SQL 查询。但是,除非您对其进行分析,否则您永远不会知道。检查 xdebug:

http://xdebug.org/

于 2013-03-27T11:28:10.357 回答
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;
}

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

于 2013-03-27T11:15:13.627 回答