1

这是我的代码:

$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!";

我的问题是:

如果重新生成的卷号再次等于数据库中已经存在的卷号,它应该如何再次生成一个新的卷号并继续检查它,除非它得到一个唯一的号码,我最终可以将其插入数据库中?请帮忙!

4

4 回答 4

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.
于 2013-06-29T08:31:29.123 回答
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!";
}


}
于 2013-06-29T09:14:56.493 回答
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 或异常(当然必须被捕获)。我什至建议记录所有错误。

于 2013-06-29T08:27:32.927 回答
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!";
于 2018-06-02T06:21:20.447 回答