PHP接口怎么防重复提交

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

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

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

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

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

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

相关推荐
郑州光合科技余经理10 小时前
海外版外卖加盟:总站与分站配送规则怎么分开管
java·开发语言·前端·后端·uni-app·php·ai编程
专业程序开发源11 小时前
springboot简历管理系统81389-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·spring·php·课程设计
专业程序开发源11 小时前
springboot社区养老系统44071-计算机课程设计、毕业设计
vue.js·spring boot·后端·python·django·php·课程设计
HRTOS11 小时前
HRTOS:一个名字背后的目标——不断逼近硬实时
经验分享·单片机·系统架构·51单片机
星光开发者13 小时前
基于决策树随机森林算法的小说推荐系统的设计与实现-计算机毕设【课程设计】78485
vue.js·算法·微信小程序·django·php·课程设计·express
沫璃染墨16 小时前
《从零入门Linux系统篇(五十七):线程篇·十——生产者消费者模型进阶:从环形缓冲区到POSIX信号量》
linux·运维·服务器·开发语言·c++·系统架构·信号处理
专业程序开发源16 小时前
SSM校园拍摄交流服务平台36936-计算机课程设计、毕业设计
java·spring boot·后端·python·elasticsearch·php·课程设计
星夜夏空9917 小时前
网络编程(5)—— Reactor实现(v3)
服务器·网络·php
树下困觉眯20 小时前
View绘制流程学习--获取WindowManager的三种方式
android·系统架构·view design
小此方20 小时前
Linux网络(二十):TCP拥塞控制与延迟应答详解:从拥塞窗口到TCP性能优化,理解TCP与UDP的效率差异
linux·网络·php