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

时间:2015-10-18 05:52:32

标签: php mysql

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

settings

DATE_INPUT_FORMATS = ( '%Y-%m-%d', '%m/%d/%Y', '%m/%d/%y') 已经存在于数据库中,但它会将$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'); 存储到数据库中,而不是生成要存储在数据库中的新数字。

3 个答案:

答案 0 :(得分:2)

<?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')";
?>

答案 1 :(得分:1)

如果第一个查询的结果返回有效结果,则不会返回true。如果query()函数失败,则false函数仅返回true,请参阅PHP manual。因此,你的while循环的条件,你在布尔=(与三个$smsCode的严格类型比较的原因)进行比较将永远不会成立,因此没有为{{1分配新值}}

尝试这样的事情

$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);
    }
}

每次在数据库中没有包含该代码的行时,这应生成一个新代码。

答案 2 :(得分:0)

你可以试试这个

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

每次它会给你一个独特的随机数