php mysql ajax提交一条数据,但mysql里有多条数据,是什么问题?

nemesiszh
  • 365

有个信息添加,在前端通过ajax提交至后端php,后端php在执行添加任务,
之前使用正常,但今天有个同样内容的信息,mysql中存在了多条,除了创建时间不同,其他都一样
不知道是什么问题,求解?

php执行添加代码如下:

$lasiID=Db::name("info")->insertGetId($data);

if($lasiID){
    return json(array('status'=>1,'msg'=>'添加数据成功!'));
}else{
    return json(array('status'=>0,'msg'=>'添加数据失败!'));
}
回复
阅读 1.4k
4 个回答
✓ 已被采纳

可以从以下几个方面来解决:
1、前端页面,如果是按钮提交的话,需要做一些防刷操作,提交一次就不能再提交了,防止多次刷提交。
2、后端,对方法可以考虑加锁来解决,一般PHP的话,可以考虑使用文件加锁, 如果用到了Redis的话,
可以用Redis分布式锁来解决。超时时间可以稍微设置5秒左右。
3、对于数据库方面来说,如果你的数据要唯一,那么你的字段和主键设计时候要设置确保唯一性。(唯一索引)。

文件锁的方式解决:

//优化方案4:使用非阻塞的文件排他锁
$fp = fopen("lock.txt", "w+");
if(!flock($fp,LOCK_EX | LOCK_NB)){

 echo "系统繁忙,请稍后再试";
 return;

}
//执行业务逻辑
flock($fp,LOCK_UN);//释放锁
fclose($fp);
关于分布式锁的解决方案,可以参考:
基于 redis 的 setnx 来解决这一问题。

这不是很正常吗?重复提交就会这样啊

有没有可能重复提交了多次?比如双击了提交按钮

你给提交按钮一个禁用的class,提交了就不能提交了。

宣传栏