2015-10-18 159 views
2

以下是我的代碼,用於檢查生成的隨機數是否在數據庫中可用。如果$ 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到數據庫中,而不是生成要存儲在數據庫中的新電話號碼。

回答

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

如果第一次查詢的結果返回有效結果,它不會返回true。如果失敗,query()函數僅返回false,請參閱PHP manual。因此,您在while循環中的條件與布爾型true(與三個=進行嚴格類型比較的原因)進行比較永遠不會是真實的,因此沒有將新值分配給$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); 
    } 
} 

這將產生一個新的代碼,每次你沒有行與代碼數據庫的時間。

+0

您需要添加'「''到$ sql' – Manikiran

+0

行動的結束並沒有複製的整個查詢:O感謝 – bish

+0

您需要將它放在';'之前,但無論如何,它比我的代碼更有效:) – Manikiran

0

你可以試試這個

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

每次它會給你一個唯一的隨機數