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