2013-02-20 68 views
0

如何自動生成一個唯一的隨機6位數字插入到mysql表的列中?隨機生成的數字不得存在於列中。我如何在PHP中生成6位數字?

我正在通過php訪問mysql。

表格式是這樣的話,用在reqnumber列隨機數去:

id,status,reqnumber 
+0

隨機產生或增加對錶中已有最新的ID? – 2013-02-20 11:32:17

+0

隨機請 – 2013-02-20 11:33:08

+0

將你的id設置爲'int AUTO_INCREMENT PRIMARY KEY',當你插入一個新行時它會自動增加,並且是唯一的。 – vikingmaster 2013-02-20 11:34:45

回答

2
function gen(){ 
    $num = rand(100000,999999); 
    if($num == ifnumberinyourdatabase){ 
    gen(); 
    } 
    return $num; 
    } 

你可以也使用遞歸功能在這裏。 其檢查的,如果號碼是你的數據庫,如果它是產生新的如果不能返回的唯一編號

function gen(){ 
     $num = rand(100000,999999); 
$query_idgetrs = "SELECT * FROM servicetbl where reqnumber = $num"; 
$idgetrs = mysql_query($query_idgetrs, $dbconnection) or die(mysql_error()); 
$row = mysql_num_rows($idgetrs); 

     if($row >= 1){ 
     gen(); 
     } 
     return $num; 
     } 
+0

這是不可能產生'000010'。 – BenM 2013-02-20 11:39:22

+0

OH在那種情況下你的答案看起來不錯,但它需要檢查數據庫 – 2013-02-20 11:41:53

+0

你能幫我寫下「ifnumberinyourdatabase」的代碼嗎? $ query_idgetrs =「SELECT id FROM servicetbl」; $ idgetrs = mysql_query($ query_idgetrs,$ dbconnection)或die(mysql_error()); while($ idgetrs1 = mysql_fetch_array($ idgetrs)){ $ peyg = $ idgetrs1 [0]; echo $ peyg; } 幫助,如果'1或more'意味着它在你的數據庫中,以便產生'$ num'再次 – 2013-02-20 11:50:13

0

放在reqnumber領域唯一約束,並把錯誤處理代碼的PHP

+0

評論,而不是答案;) – BenM 2013-02-20 11:36:54

1

就產生一個隨機數然後用str_pad()

$myRandom = str_pad(rand(1,999999), 6, '0', STR_PAD_LEFT); 

,你要碰上的是,因爲你需要這是隨機的問題,有沒有w ^唉,知道它是否存在於表中,直到它生成。你必須做一個循環,並繼續檢查數據庫。

0

雖然隨機確定,但請注意,6位數只能提供100萬組合。我不確定在開始獲取重複的主鍵錯誤之前需要多長時間。

更好的解決方案是使用獨特的值。這與隨機值非常不同,因爲每次都有獨特的值保證不同。 MySql有auto_increment數據類型來幫助你做到這一點。不幸的是,使用6位數字時,您仍然限制在一百萬條記錄中。

如果您想要一個完全隨機的長標識符,請檢查MySql's UUID functio n。它會生成一個唯一的字符串,保證不會重複。然而,它比6個字符長得多,因爲這可以實現唯一性。

0

你的表結構的一部分必須是:

`id` mediumint(6) AUTO_INCREMENT NOT NULL, 
PRIMARY KEY (`id`) 

如果你真的需要6個位數總是:

ALTER TABLE tbl AUTO_INCREMENT = 100000;

或使用 sprintf()

+0

這將最大長度爲6分配給整數。它不會將'12'轉換爲'000012'。 – BenM 2013-02-20 11:38:09

相關問題