PHP接口怎么防重复提交

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

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

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

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

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

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

相关推荐
在世修行2 小时前
干货:三合一架构:GUI/HTTP/引擎如何共用一条任务队列
系统架构·ai编程·任务队列·trae work
郑州光合科技余经理3 小时前
本地生活系统:多业务订单字段怎么分账本导出
java·开发语言·前端·数据库·uni-app·php·ai编程
新时代牛马10 小时前
嵌入式网络完整篇:从LwIP/以太网驱动到 Linux netdev 与排障
linux·网络·php
天山@12312 小时前
PHP代码审计实验记录
网络安全·php·php代码审计
门思科技14 小时前
LoRaWAN 网络容量估算:一个 SX1302 网关到底能带多少设备
开发语言·网络·php
ID346107442019 小时前
【课程设计】基于Spring Boot+Vue的校园共享无人机服务系统设计与实现-计算机毕设 附源码44219
javascript·vue.js·spring boot·python·node.js·php·课程设计
sbjdhjd20 小时前
ThinkPHP 5.0.10 缓存写入型 RCE 复盘:从手动搭建、换行绕过到源码单步验证 | 05
java·后端·安全·spring·网络安全·数据挖掘·php