如何向数据库多表插入数据?请修正重复插入数据的代码
问题分析与修复
你的代码核心问题是第二个插入操作误用了第一个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
相关产品推荐
相关产品推荐

