如何使用SQL INSERT INTO SELECT语句向nilai表插入course数据并解决Id_student插入问题
问题修复方案
原代码核心问题
- 变量大小写不统一:定义的变量是
$Id_student,插入语句中错误写为$Id_Student,导致学生ID为空插入失败 - 函数使用错误:执行SQL查询应该用
mysqli_query,你错误使用了用于创建数据库连接的mysqli_connect函数 - 逻辑错误:用户组判断语句中误用赋值符
=,应该用相等判断符== - 插入逻辑错误:你将插入SQL的执行代码写在了
echo语句中,代码只会被输出到页面不会实际执行 - 存在SQL注入风险:直接拼接用户传入的参数到SQL语句中
修正后代码(基于INSERT INTO SELECT实现)
使用INSERT INTO SELECT可以直接批量插入,无需循环遍历查询结果,执行效率更高,同时使用预处理语句避免SQL注入风险:
<?php session_start(); // 补全缺失的会话启动代码 if (!isset($_SESSION["Login"]) || $_SESSION["Login"] != true){ header("Location: ../pagenotfound.php"); exit(); // 修正赋值符为相等判断符 } else if ($_SESSION["Id_Usergroup"] == 3){ $_SESSION["Login"] = true; } else { header("Location: ../pagenotfound.php"); exit(); } // 接收传入参数 $Id_student = $_POST["Username"]; $Kode_krs_Kelas = $_POST["Kode_krs_Kelas"]; $ChoseSemester = $_POST["ChoseSemester"]; // INSERT INTO SELECT 语法实现批量插入 $sql = "INSERT INTO nilai (Id_student, Class, Semester, Id_Course, SKS, Status) SELECT ?, ?, Semester, Id_Course, SKS, ? FROM Course WHERE Semester = ?"; $stmt = mysqli_prepare($konek, $sql); // 绑定参数,四个参数依次对应学生ID、班级、固定状态值、选择的学期 mysqli_stmt_bind_param($stmt, "sssi", $Id_student, $Kode_krs_Kelas, $status, $ChoseSemester); $status = 'Baru'; // 执行插入操作 if (mysqli_stmt_execute($stmt)) { header('Location: nilai.php'); exit(); } else { die('Terdapat Kesalahan : ' . mysqli_error($konek)); } // 关闭预处理对象 mysqli_stmt_close($stmt); ?>
字段适配说明
如果你的nilai表中学分字段实际命名为SKS_krs,对应修改SQL语句中的字段名即可。
内容的提问来源于stack exchange,提问作者Roymond Chandra Pradana
相关产品推荐
相关产品推荐

