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

时间:2013-09-04 17:39:42

标签: php do-while

我正在尝试使用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));

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

可能导致这种情况的原因是什么?

2 个答案:

答案 0 :(得分:0)

您的查询永远不会评估为true,因此循环是无限的。只要它没有拉回任何行where code = 'yourRandomNumber',那么你将无限期地循环。

答案 1 :(得分:0)

如果您只想从数据库中选择一个随机的“代码”,那么此代码将比您所拥有的 更高效。

$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)];

重新阅读您的问题和评论我越来越不确定您的代码最初要完成的任务,如果您可以更清楚地了解您的目标,我们可能会就如何实现您的目标提供一些建议目标更有效率。

编辑:

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

$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)];