生成唯一的随机数存储在数据库中


Generate unique random numbers to be stored in database

下面是我检查生成的随机数是否在数据库中可用的代码。如果$smsCode已经在数据库中,那么生成一个新的随机数。但它并没有像预期的那样工作。

$smsCode = 7552;
        $query = "SELECT * FROM appointment WHERE sms_code = '$smsCode'";
        while($conn->query($query) === TRUE){
            $smsCode = rand(1000,9999);
            $query = "SELECT * FROM appointment WHERE sms_code = '$smsCode'";
            $conn->query($query);
        }
$sql = "INSERT INTO appointment(number) VALUES('$smsCode');

$smsCode = 7552已经在数据库中,但它继续将7552存储到数据库中,而不是生成一个新的数字来存储在数据库中。

<?php
$sms_code=rand(1000,9999);
$cond=True;
while($cond){
    $query = "SELECT * FROM appointment WHERE sms_code = '$smsCode'";
    $result = $conn->query($query);
    if(mysql_num_rows($result)>0)
    {
        $sms_code=rand(1000,9999);
    }
    else
    {
        $cond=False;
    }
}
$sql = "INSERT INTO appointment(number) VALUES('$smsCode')";
?>

如果第一个查询的结果返回一个有效的结果,它不返回truequery()函数失败时只返回false,参见PHP手册。因此,与布尔值true进行比较的while循环条件(导致与三个=进行严格类型比较)永远不会为真,因此不会为$smsCode赋新值。

试试这样

$smsCode = 7552;
while(true) {
    $query = "SELECT * FROM appointment WHERE sms_code = '$smsCode'";
    if($conn->query($query) === false) {
      $sql = "INSERT INTO appointment(number) VALUES('$smsCode')";
      break;
    } else {
      $smsCode = rand(1000,9999);
    }
}

这应该会生成一个新的代码,每次你的数据库中没有行与该代码。

你可以试试这个

$date = date_create();
$smsCode = date_timestamp_get($date);

每次都会给你一个唯一的随机数