PHP接口怎么防重复提交

最近处理一个企业后台时遇到一个问题:用户点击"提交"以后,因为网络有点慢,连续点了两三次按钮,结果数据库里生成了多条完全一样的记录。前端虽然已经做了按钮禁用,但只要请求重试、页面卡顿或者用户换个入口再次提交,还是可能出现重复数据。

后来继续排查发现,单纯依赖前端并不可靠。真正防重复提交,还是要在服务端做限制。

这个项目最后用了业务唯一标识来处理。前端每次发起提交时都会带一个唯一请求号,PHP 接口收到后先判断这个请求号是否已经处理过。如果已经存在,就直接返回上一次结果,不再重新写数据库。数据库层再给关键业务字段增加唯一约束,作为最后一道保险。

对于订单、表单线索、支付回调、佣金记录这类重要业务,我一般不会只写一段"先查询再插入"的逻辑。因为并发情况下,两个请求可能同时查到数据不存在,然后一起执行插入,最后还是会重复。

所以现在做接口时,我会把重复提交当成正常场景提前考虑,而不是等数据出问题以后再人工删除。前端防误点、接口幂等、数据库唯一约束三层一起做,系统会稳定很多。

#PHP开发 #接口开发 #重复提交 #后台系统

相关推荐
坐看风云变幻3 小时前
《系统架构师成长之路》第 8 期|微服务:单体拆分的时机、粒度与通信
微服务·架构·系统架构
运维行者_3 小时前
网络监控工具怎么选?从设备监控到智能运维的能力清单
运维·服务器·开发语言·网络·人工智能·支持向量机·php
Aman19845 小时前
优雅的红点系统:MV数据视图分离与全局集中管理
系统架构·游戏程序
星光开发者6 小时前
基于springboot智慧草场牛羊管理系统-计算机毕设【课程设计】50360
vue.js·spring boot·后端·mysql·php·课程设计·express
weixin_BYSJ19876 小时前
电竞先锋网站---附源码02032
java·vue.js·spring boot·python·django·tomcat·php
郑州光合科技余经理7 小时前
同城小程序开发:同一笔单在用户端和商家端各显示到哪
android·java·开发语言·前端·后端·uni-app·php
2401_872418789 小时前
互联网公开信息检索完全指南:Google、Yandex、Wayback Machine、DNS、WHOIS、Shodan 等 OSINT 工具大全
开发语言·php
9624569 小时前
餐饮 SaaS 优惠券系统架构演进(十三)券模板、发放批次与用户券数据模型:不可变快照、版本演进、状态归档与冷热分层
系统架构
aixingpan9 小时前
aixingpan.cnAPI开发文档:api_docs_trichart_natal_solar_return_transit2接口指南
前端·php
艺杯羹10 小时前
告别大模型滥用与延迟失控:确定性优先法则与本地规则引擎实战
前端·人工智能·系统架构