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

表单无法向MySQL数据库插入数据,SQL查询报错请求排查

解决MySQL插入语句的语法错误问题

先看你提交的报错SQL语句,一眼就能发现几个明显的语法问题:

INSERT INTO gjenstand(idselger,bilde,beskrivelse,idkategori,minstepris,utlopsdato) VALUES (1,23.jpeg,TVbord,,950,2018-06-23)

错误点分析

  • 字符串/日期值未加单引号:23.jpeg(图片文件名)、TVbord(描述)、2018-06-23(截止日期)这些属于字符串或日期类型,MySQL要求必须用单引号'包裹,否则会被解析为列名或表达式,直接导致语法错误。
  • 空值处理不当:idkategori对应的位置是两个逗号之间的空值,如果这个列不允许为NULL,数据库会抛出非空约束错误;即使允许为空,也应该显式写NULL,而不是留空。
  • 日期被解析为算术运算:没加单引号的2018-06-23会被MySQL当成2018 - 6 - 23,计算结果是1989,完全不是你要存储的日期。

修复后的正确SQL示例

假设idkategori允许为空,修复后的SQL应该是这样:

INSERT INTO gjenstand(idselger,bilde,beskrivelse,idkategori,minstepris,utlopsdato) 
VALUES (1, '23.jpeg', 'TVbord', NULL, 950, '2018-06-23')

结合你的PHP代码优化(避免SQL注入+减少语法错误)

你当前的代码是直接拼接SQL字符串,这不仅容易出现语法问题,还存在严重的SQL注入风险。推荐使用MySQLi的预处理语句,既安全又能避免手动拼接字符串的错误:

$conn = mysqli_connect("localhost", "root", "root", "bruktbutikk");
// 检查连接是否成功
if (!$conn) {
    die("连接失败: " . mysqli_connect_error());
}

$sql1 = "select beskrivelse from kategori";
$datasett1 = $conn->query($sql1);

if (isset($_POST["submit"])) {
    // 获取表单提交的值(记得做基本过滤)
    $idselger = $_POST['idselger']; // 假设表单有这个字段
    $bilde = $_POST['bilde'];
    $beskrivelse = $_POST['beskrivelse'];
    $idkategori = $_POST['idkategori'] ?? NULL; // 处理空值
    $minstepris = $_POST['minstepris'];
    $utlopsdato = $_POST['utlopsdato'];

    // 使用预处理语句
    $sql = "INSERT INTO gjenstand(idselger, bilde, beskrivelse, idkategori, minstepris, utlopsdato) 
            VALUES (?, ?, ?, ?, ?, ?)";
    
    $stmt = mysqli_prepare($conn, $sql);
    // 绑定参数:i=整数,s=字符串,d=浮点数,这里根据你的列类型调整
    mysqli_stmt_bind_param($stmt, "issidi", $idselger, $bilde, $beskrivelse, $idkategori, $minstepris, $utlopsdato);
    
    // 执行语句
    if (mysqli_stmt_execute($stmt)) {
        echo "数据插入成功!";
    } else {
        echo "查询语句错误: " . mysqli_stmt_error($stmt);
    }
    
    // 关闭语句和连接
    mysqli_stmt_close($stmt);
}

mysqli_close($conn);

额外提示

  1. 永远不要直接将用户输入(比如$_POST里的值)拼接到SQL语句中,预处理语句是防止SQL注入的标准做法。
  2. 确保你的表单字段名称和代码中获取的$_POST键名一致,避免因字段名拼写错误导致值为空。
  3. 检查gjenstand表的列约束:比如idkategori是否允许NULL,minstepris是否是数值类型等,避免因数据类型不匹配报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:28:14