首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查密码的有效方法是在数据库中

问检查密码的有效方法是在数据库中
EN

Stack Overflow用户
提问于 2012-10-16 17:44:44
回答 3查看 73关注 0票数 0

我有一个系统,可以生成一批随机代码,每次最多100个。然后将它们插入到数据库中。我正在使用一个代码生成器,不太可能再次创建类似的代码,但要确保无论如何我都要检查数据库中是否有重复的代码。我的理论..。

代码语言:javascript
复制
  $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++
      } 
    }

看起来乱七八糟,还有更好的主意吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-10-16 17:46:04

为Code列提供唯一约束:

代码语言:javascript
复制
CREATE TABLE Code
(
  Code ..
..
  CONSTRAINT Code_Unique UNIQUE (Code),
..
);

在插入时,您只需要捕获数据库异常/错误,而不必担心代码是否已经存在。

票数 1
EN

Stack Overflow用户

发布于 2012-10-16 17:47:07

这是混乱的。更重要的是,它还受到竞争条件的影响,另一个进程可能会在您的check和insert之间插入该代码。

如果您想避免这种情况,请使code列成为唯一的键,然后尝试插入它。如果它已经存在,原子操作将返回错误或引发异常,您可以检查/捕获这些异常。

通过执行尝试后检查,您不会丢失任何东西,因为您无论如何都必须进行检查(以防前面提到的竞争条件咬到您)。但你得到的是原子性和更干净的代码。

票数 1
EN

Stack Overflow用户

发布于 2012-10-16 17:51:12

非常简单的解决方案,确保你放入代码中的函数不会放入已经存在的代码中。

基本上:

生成代码

检查代码是否存在

是,->生成新代码

没有->将代码放入数据库

没时间写脚本了对不起

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12911810

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档