Do while循环挂起与网站的连接


Do-while loop hangs the connection to website

我正在尝试使用do while循环来检查数据库中是否存在值

function check($a) {
$query = "SELECT * FROM `table` WHERE code = '$a'";
$result = mysql_query($query);
$nm = mysql_num_rows($result);
if ($nm > 0) {
return true;
} else {
return false;
}
}
function randomnumber() {
    $chars = "abcdefghijkmnopqrstuvwxyz023456789";
    srand((double)microtime()*1000000);
    $i = 0;
    $pass = '' ;
    while ($i <= 10) {
        $num = rand() % 33;
        $tmp = substr($chars, $num, 1);
        $pass = $pass . $tmp;
        $i++;
    }
    return $pass;
}
$number = randomnumber();
do { $number = randomnumber(); } while (!check($number));

该代码以某种方式挂起了与网站的连接。在我执行这个页面后,奇怪的是,在我重新启动浏览器之前,它无法连接到网站。

是什么原因造成的?

您的查询从未计算为true,因此循环是无限的。只要它没有拉回任何行where code = 'yourRandomNumber',那么您将无限期地循环。

如果你想简单地从数据库中随机选择一个"代码",这个代码将比你现有的效率高得多。

$query = 'SELECT DISTINCT code FROM `table`';
$result = mysql_query($query);
$my_arr = array();
while($row = $mysql_fetch_assoc($result)) {
  $my_arr[] = $row['code']
}
$random_key = $my_arr[array_rand($my_arr)];

重读你的问题和评论我越来越不确定你的代码最初打算实现什么,如果你能在这里更加明确你的目标,我们可能会就如何更有效地实现你的目标给你一些建议。

编辑:

此代码将检索表中已使用的所有代码,计算可能代码的差异,然后返回一个随机未使用的代码。不需要循环。[嗯,一个循环,但它很短]

$psbl_codes = str_split("abcdefghijkmnopqrstuvwxyz023456789");
$query = 'SELECT DISTINCT code FROM `table`';
$result = mysql_query($query);
$used_codes = array();
while($row = $mysql_fetch_assoc($result)) {
  $used_codes[] = $row['code']
}
$unused_codes = array_diff($psbl_codes, $used_codes);
echo "random unused code: " . $unused_codes[array_rand($unused_codes)];