-1

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

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

这可能是什么原因?

4

2 回答 2

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

重新阅读您的问题和评论我越来越不确定您的代码最初打算完成什么,如果您可以更清楚地了解您的目标,我们可能会就如何更有效地实现您的目标给您一些建议.

编辑:

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

$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)];
于 2013-09-04T17:55:46.920 回答
0

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

于 2013-09-04T17:44:25.223 回答