2012-10-16 36 views
0

我有一個系統可以一次生成一批最多100個隨機碼。然後將它們插入到數據庫中。我正在使用代碼生成器,並且很可能不會再次創建類似的代碼,但是爲了確保我要檢查數據庫是否有重複。我的理論..檢查密碼的有效方法是在數據庫中

$amount_of_codes 


    while ($x != $amount_of_codes) 
    { 
    $code = gencode(); 
    $mysql_check = "SELECT code FROM data WHERE code = '$code'"; 
    $mysql_check_result = mysql_query($mysql_check); 
    $check = mysql_num_rows($mysql_check_result); 
    if (!$check) 
     { 
     mysql_query("INSERT INTO data(code) values('$code')") 
     $x++ 
     } 
    } 

似乎凌亂,有沒有更好的點子?

+0

即時通訊這是正確的方式來做到這一點,更快的速度:cre吃了代碼欄的索引 – x4rf41

+1

這是一個很好的做法。但是你不需要有唯一的密碼。你需要獨特的用戶,對吧? – elvenbyte

回答

1

給這個Code列的唯一約束:

CREATE TABLE Code 
(
    Code .. 
.. 
    CONSTRAINT Code_Unique UNIQUE (Code), 
.. 
); 

當插入你只需要捕獲數據庫異常/錯誤,如果代碼已經存在不擔心。

1

凌亂。更重要的是,它也受到競爭條件的影響,在這種情況下,另一個流程可能會在您的支票和您的支票之間插入該代碼。

如果您想避免這種情況,請將代碼列設置爲唯一鍵,然後嘗試插入它。如果它已經存在,則該原子操作將返回錯誤或引發異常,您可以檢查/捕獲該異常。

通過執行嘗試後檢查,你不會失去任何東西,因爲你必須檢查(如果上述競爭條件咬你)。但是你獲得的是原子性和更乾淨的代碼。

0

真的很簡單的解決方案,確保你的函數女巫放在代碼中不存在代碼女巫已經退出。

基本上是:

如果代碼中存在

是生成代碼

赤 - >生成新的代碼

沒有 - 在DB>把代碼

沒有時間腳本對不起

相關問題