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

如何向数据库多表插入数据?请修正重复插入数据的代码

问题分析与修复

你的代码核心问题是第二个插入操作误用了第一个SQL变量$sql,导致重复向table_attendance表插入数据,完全没有执行备份表的插入逻辑。另外原代码存在SQL注入风险,下面给出修正后的优化版本:

修正后的代码

if(isset($_POST['text']))
{
    $text = $_POST['text'];

    // 插入主考勤表,使用预处理语句防注入
    $mainSql = "INSERT INTO table_attendance(NAME, TIMEIN) VALUES(?, NOW())";
    $mainStmt = mysqli_prepare($conn, $mainSql);
    mysqli_stmt_bind_param($mainStmt, "s", $text);
    $mainResult = mysqli_stmt_execute($mainStmt);
    
    if($mainResult) 
    {
        // 插入备份表,使用独立的SQL变量避免重复操作
        $backupSql = "INSERT INTO table_attendancebackup(NAME, TIMEIN) VALUES(?, NOW())";
        $backupStmt = mysqli_prepare($conn, $backupSql);
        mysqli_stmt_bind_param($backupStmt, "s", $text);
        $backupResult = mysqli_stmt_execute($backupStmt);
        
        if ($backupResult) {
            $_SESSION['success'] = '操作完成';
        } else {
            $_SESSION['error'] = mysqli_error($conn);
        }
        
        mysqli_stmt_close($backupStmt);
    } else {
        $_SESSION['error'] = mysqli_error($conn);
    }
    
    mysqli_stmt_close($mainStmt);
}

关键修改说明

  • 给主表和备份表的SQL语句分配独立变量($mainSql和$backupSql),彻底避免复用错误的SQL导致重复插入。
  • 替换为预处理语句绑定参数,彻底消除SQL注入风险,这是直接拼接用户输入写法的必要安全优化。
  • 补充语句关闭操作,优化数据库资源管理。
  • 统一错误处理逻辑,让代码更易维护。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 03:45:41