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

向SQL插入数据时重复插入两行,请求排查原因

插入SQL时重复两行的问题排查与解决

问题原因

你代码里的重复插入确实是注释为// id_no update的if语句导致的:你先执行了一次$result=mysqli_query($con,$sql);完成插入,紧接着又在if条件里调用mysqli_query($con,$sql)再次执行了同一个INSERT语句,等于连续执行两次插入操作,自然会产生重复行。

修正代码

把重复执行的INSERT语句去掉,改成判断第一次插入操作的结果即可,修正后的核心代码如下:

<?PHP
  if(isset($_POST['add_id']))
  {
    $id_no = mysqli_real_escape_string($con,$_POST['id_no']);
    $sql="INSERT INTO `db_name`(`id_no`) VALUES ('$id_no')";
    $result=mysqli_query($con,$sql);

    // id_no update
    if($result) // 改为判断第一次插入的结果,不再重复执行INSERT
    {
      $query = "SELECT id_no FROM db_name ORDER BY id_no DESC";
      $result_select = mysqli_query($con,$query); // 重命名变量,避免覆盖之前的$result
      $row = mysqli_fetch_array($result_select);
      $lastid = $row['id_no'];

      if(empty($lastid))
      {
        $number = "SX000001";
      }
      else
      {
        $idd = str_replace("SX", "", $lastid);
        $id = str_pad($idd + 1, 6, 0, STR_PAD_LEFT);
        $number = 'SX'.$id;
      }

    }
    else
    {
        echo "Record Faileddd";
    }


    if($result)
    {
      $success="Post has been added successfully";
    } else 
    {
      $error="Something went wrong!";
    }
      $id_no = '';
    }
?>

额外优化建议

  • 你当前手动生成类自增ID的方式存在并发风险:如果有多个请求同时执行,可能会取到相同的最后ID,生成重复的编号。建议改用数据库自增字段配合字符串拼接的方式:
    1. 在表中新增一个INT类型的自增主键字段id
    2. 插入数据时无需手动生成编号,数据库自动维护id的自增
    3. 需要获取带前缀的编号时,用SQL函数拼接:CONCAT('SX', LPAD(id, 6, '0'))
  • 代码中尽量区分不同操作的变量名(比如把查询结果的变量改为result_select),避免因变量覆盖导致逻辑混乱

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 21:30:58