如何检查数据库中是否存在ID,否则将其插入数据库?

时间:2013-08-20 13:33:21

标签: php mysql database insert exists

我有一个代码,用代码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,直到它在数据库中不存在,然后将其插入数据库。我已经阅读过几个循环(例如whilefor),但我不知道如何使用它们。

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

干杯

3 个答案:

答案 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
 
   ?>