防止重复的SQL条目

Kev*_*vin 3 php mysql sql security duplicates

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

我试着检查它是否在插入时存在,但问题是,如果你同时打开两个浏览器窗口并同时点击提交,它们都会检查,检查会清除,然后它们都会插入如果它足够接近.

哦,这是在PHP网站上.

谢谢!

vbe*_*nce 12

CREATE UNIQUE INDEX idxname ON tablename (fieldname);
Run Code Online (Sandbox Code Playgroud)

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

您将在第二个客户端收到MySQL错误.您应该在PHP代码中处理此问题,并再次放置表单(而不是仅显示错误消息).

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

  • 对此的额外好处是大多数数据库供应商将针对唯一约束违规触发特定错误,这意味着您可以在脚本中捕获它 (2认同)