我有一个代码,用代码mt_rand(100000,999999);
生成一个6位数的随机数,并将其存储在变量$student_id
中。我使用以下代码检查数据库中是否存在该数字。
if($stmt = mysqli_prepare($connect, "SELECT id FROM students WHERE id = ? LIMIT 1")) {
mysqli_stmt_bind_param($stmt, "i", $student_id);
mysqli_stmt_execute($stmt);
mysqli_stmt_store_result($stmt);
mysqli_stmt_bind_result($stmt, $db_id);
mysqli_stmt_fetch($stmt);
}
if(mysqli_stmt_num_rows($stmt) == 1) {
echo "The ID exists.";
} else {
// Insert $student_id into database
}
如果mysqli_stmt_num_rows($stmt) == 0
,此代码可以将ID插入数据库。但是,如果ID已经存在,它将不会生成新的6位随机ID,它不会检查数据库中是否已存在该ID,等等。我可以想象我将不得不使用某种循环将继续生成一个随机ID,直到它在数据库中不存在,然后将其插入数据库。我已经阅读过几个循环(例如while
或for
),但我不知道如何使用它们。
任何人都可以帮助我解决这个问题,还是帮助我朝着正确的方向前进?
干杯
答案 0 :(得分:0)
如果您不想使用自动增量字段,可以通过以下方式更改查询:
SELECT id FROM students WHERE id = ? limit 1
becames
SELECT count(id) FROM students WHERE id = ?
因此,您可以检查结果是否为> 0(存在)与否(不存在)
答案 1 :(得分:0)
如果您只需要6个数字,请使用自动增量列,但请从100000
开始,而不是通常的起始值1
。
您可以在创建表时执行此操作:
CREATE TABLE MYTABLE (
ID INT NOT NULL AUTO_INCREMENT,
-- other columns
)
AUTO_INCREMENT = 100000;
见SQLFiddle上的演示。
或者如果表已经存在并带有自动增量列,您可以设置它:
ALTER TABLE MYTABLE AUTO_INCREMENT = 100000;
答案 2 :(得分:0)
我为此创建了一个简单的PHP解决方案,尽管Bohemian答案对于MySQL方法是有效的,但这是一种使用do ... while循环进行问卷调查的方法。
<?php
do {
$unique_id = mt_rand(100000, 900000);//generates 6 random numbers
$query = mysqli_query($mysqli, "select * from users where unique_id='$unique_id'");
} while(mysqli_num_rows($query) > 0);// repeats loop till generated id is not found
//php insert query comes here
?>