我有以下函數似乎永遠運行。它創建一個隨機字符串,然後檢查它是否在數據庫中。如果是的話,它應該一次又一次運行,直到它有一個新的。它應該然後返回給我的價值檢查隨機字符串不在數據庫中
public function checkPromo(){
$continue = true;
while ($continue){
$promo = $this->getRandString(6);
$query = sprintf("SELECT * FROM table WHERE field=%s",
$this->db->cleanCode($promo, "text"));
$result = $this->db->query($query);
if($this->db->num_rows($result) >= 1){
$continue = false;
}
}
return $promo;
}
這段代碼很容易出現競爭狀況,甚至可能導致堆棧溢出。它還包含一個bug,它不會從遞歸調用中返回任何東西。 – deceze
添加一條評論以使其更清晰:此代碼採用與問題中相同的不可取的方法。如果沒有找到合適的隨機字符串,它也會使它變成遞歸函數而變得更糟,易受堆棧溢出的影響。隨着更多的隨機字符串被添加,代碼仍然會呈指數級慢。 – Grampa