You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何避免MariaDB中的insert查询插入重复数据?

重复插入的问题原因
  • 代码逻辑错误:你先后两次调用了execute()执行插入语句,第一次无判断直接执行一次,if条件判断时又执行了第二次,单次请求就会插入2条完全相同的记录。
  • 预处理用法不规范:直接把变量拼接进SQL语句,没有用预处理的参数绑定能力,存在SQL注入风险。
  • 额外场景风险:就算代码逻辑修复后,也可能出现用户刷新页面、重复点击提交按钮导致的重复提交问题。
修复方案

代码逻辑修复

移除多余的execute()调用,同时修正预处理写法,用参数绑定替代字符串拼接,修复后的示例代码如下:

// 预处理SQL用占位符代替直接拼接变量
$query = $connect->prepare("INSERT INTO posts (title, date, author, content, image) VALUES (?, ?, ?, ?, ?)");
// 绑定参数,sssss对应五个字符串类型参数,可根据实际字段类型调整
$query->bind_param("sssss", $title, $date, $author, $content, $fileNameNew);

// 仅执行一次插入操作
if($query->execute()){
    echo "发布成功";
    // 提交成功后跳转到其他页面,防止刷新重复提交POST请求
    // header('Location: post_list.php');
    // exit();
    $query->close();  
}else{
    echo "发布失败";
}

额外防护措施

  • 数据库层防护:给posts表的核心业务字段(比如标题+发布时间、或者你判定内容唯一的字段组合)添加唯一联合索引,即使逻辑层出现疏漏,数据库也会直接拒绝重复数据写入。
  • 前端防护:给提交按钮添加点击后1-2秒的禁用逻辑,避免用户误触多次点击触发多次请求。
  • 逻辑层防护:可以给表单添加一次性的CSRF Token,提交后校验Token有效性,校验通过立即销毁当前Token,同一个Token无法重复提交。

内容的提问来源于stack exchange,提问作者Agent21

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 20:09:02