2012-10-16 40 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>把代码

没有时间脚本对不起

相关问题