这是我的代码:
$roll = rand(100,1000000);
$result = mysql_query("SELECT roll FROM users") or die(mysql_error());
if($row["roll"] == $roll) {
$roll = rand(100,1000000);
}
else
{
mysql_query("INSERT INTO users (roll) VALUES('$roll') ") or die(mysql_error());
}
echo "Data Inserted!";
我的问题是:
如果重新生成的卷号再次等于数据库中已存在的卷号,它应如何再次生成新的卷号并继续检查它,除非它获得唯一的数字,我最终可以在数据库中插入?请帮忙!
答案 0 :(得分:1)
您不必每次都获取所有卷。这只是浪费资源。只需检查数据库中是否存在卷,如果存在,请检查新卷。
function doesRollExist($roll) {
$sql = "SELECT COUNT(*) FROM users WHERE roll = " . (int)$roll;
$result = mysql_query($sql);
if ($result) {
return ((int)mysql_result($result, 0)) != 0;
}
else {
trigger_error("Query failed: " . mysql_error(), E_USER_ERROR);
}
}
do {
$newRoll = mt_rand(100, 1000000);
}
while (doesRollExist($newRoll));
// Now $newRoll will be a random number that doesn't exist
// in the database.
答案 1 :(得分:0)
试试这个:
$count = 1;
while($count > 0) {
$roll = rand(100,1000000);
mysql_query('SELECT COUNT(1) FROM `users` WHERE roll=' . mysql_real_escape($roll)) or die('Can\'t query the DB server.');
$countRow = mysql_fetch_array($result);
$count = $countRow[0];
}
在现实生活中,您应该添加更好的错误检查 - 使用trigger_error或异常(当然必须捕获)。我甚至建议记录所有错误。
答案 2 :(得分:0)
你可以通过这种方式实现
$flag=1;
while($flag==1)
{
$roll = rand(100,1000000);
$result = mysql_query("SELECT roll FROM users WHERE roll=$roll") or die(mysql_error());
$row = mysql_fetch_row($result);
if($row[0] == $roll)
{
$roll = rand(100,1000000);
}
else
{
$flag=0;
mysql_query("INSERT INTO users values($roll)") or die(mysql_error());
echo "Data Inserted!";
}
}
答案 3 :(得分:0)
$roll = rand(100,1000000);
$result = mysql_query("SELECT roll FROM users") or die(mysql_error());
while($row["roll"] == $roll) {
$roll = rand(100,1000000);
}
mysql_query("INSERT INTO users (roll) VALUES('$roll') ") or
die(mysql_error());
echo "Data Inserted!";