0

我有一个代码,它使用代码生成一个 6 位随机数并将其mt_rand(100000,999999);存储在变量中$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
}

此代码可以将 ID 插入到数据库中,如果mysqli_stmt_num_rows($stmt) == 0. 但是,如果 ID 已经存在,它不会生成一个新的 6 位随机 ID,它不会检查该 ID 是否已经存在于数据库中,等等。我可以想象我将不得不使用某种循环将继续生成一个随机 ID,直到它在数据库中不存在,然后将其插入数据库。我读过一些循环(如whileor for),但我不知道如何使用它们。

任何人都可以帮助我解决这个问题或帮助我朝着正确的方向前进吗?

干杯

4

3 回答 3

0

如果您不想使用自动增量字段,您可以通过以下方式更改您的查询:

SELECT id FROM students WHERE id = ? limit 1

变成了

SELECT count(id) FROM students WHERE id = ?

所以你可以检查结果是否> 0(存在)或不(不存在)

于 2013-08-20T15:25:00.893 回答
0

如果您只需要 6 位数字,请使用自动增量列,但将其1000001.

您可以在创建表时执行此操作:

CREATE TABLE MYTABLE (
    ID INT NOT NULL AUTO_INCREMENT,
    -- other columns
)
AUTO_INCREMENT = 100000;

请参阅SQLFiddle上的演示。

或者,如果表已经存在自动增量列,您可以设置它:

ALTER TABLE MYTABLE AUTO_INCREMENT = 100000;
于 2013-08-21T07:02:01.800 回答
0

我为此创建了一个简单的 PHP 解决方案,而波西米亚式的答案对 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
 
   ?>
于 2020-10-02T06:26:29.253 回答