我有以下函数似乎永远运行。它创建一个随机字符串,然后检查它是否在数据库中。如果是的话,它应该一次又一次运行,直到它有一个新的。它应该然后返回给我的价值检查随机字符串不在数据库中
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