防止重复的SQL条目

时间:2011-03-23 22:52:05

标签: php mysql sql security duplicates

我希望能够防止重复的SQL文本字段行。也就是说,如果第1行的名称字段已经定义为“John Smith”,我不希望它能够添加另一个“John Smith”(这个名称可能是通用的)。

我尝试检查它是否在插入时存在,但问题是,如果您同时打开两个浏览器窗口并同时单击提交,它们都会检查,检查将清除,然后它们'如果它足够接近,则插入两者。

哦,这是在PHP网站上。

谢谢!

3 个答案:

答案 0 :(得分:12)

CREATE UNIQUE INDEX idxname ON tablename (fieldname);

添加此索引将确保fieldname字段的重复条目不会记录到tablename表中。

第二个客户端会出现MySQL错误。您应该在PHP代码中处理此问题,然后再次放置表单(而不是仅显示错误消息)。

另一种可能性(对于更复杂的情况)是LOCK功能。如果在检查之前锁定表,然后插入记录,则会延迟并发操作(在第二个浏览器窗口中),直到您释放锁。然后记录将被保存,因此第二个PHP脚本将看到它并处理引用。

答案 1 :(得分:0)

DISTINCT也可用于选择唯一的行。

...
select distinct *
  from table1
...

答案 2 :(得分:-1)

看看here,你需要独一无二。