我有一个系统可以一次生成一批最多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 :(得分:1)
赋予Code
列一个UNIQUE约束:
CREATE TABLE Code
(
Code ..
..
CONSTRAINT Code_Unique UNIQUE (Code),
..
);
插入时,您只需捕获数据库异常/错误,不必担心代码是否已存在。
答案 1 :(得分:1)
凌乱。更重要的是,它还受到竞争条件的影响,其他进程可以在您的支票和插页之间插入该代码。
如果您想避免这种情况,请将代码列设为唯一键,然后尝试插入它。如果它已经存在,那么原子操作将返回错误或引发异常,您可以检查/捕获。
通过进行尝试后检查,您无论如何都要失败,因为无论如何都必须检查(如果前面提到的竞争条件让您感到困惑)。但你获得的是原子性和清洁代码。
答案 2 :(得分:0)
真的很简单的解决方案,确保你的函数输入代码中没有放入已经退出的代码。
基本上:
生成代码
如果代码存在则谢谢
是 - >生成新代码
不 - >把代码放在db
中没有时间让脚本抱歉