簡體   English   中英

生成唯一的隨機數以存儲在數據庫中

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

如果第一個查詢的結果返回有效結果,則不會返回true query()函數僅在失敗時返回false ,請參見PHP manual 所以,你的while循環的,你做一個比較布爾條件true (嚴格類型comparions原因有三個= )將永遠是真實的,因此沒有新的值被分配到$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);

每次都會為您提供唯一的隨機數

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM