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

如何使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 10:09:01