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

向MySQL JSON字段插入数据遇语法错误,求解决方案

问题分析与解决方法

错误原因

你当前的SQL语法错误源于两个核心问题:

  1. 误用MySQL的JSON_OBJECT()函数:该函数需要传入键值对参数(如JSON_OBJECT('field1', val1, 'field2', val2))生成JSON对象,但你直接传入了完整的JSON数组字符串,导致MySQL无法解析语法。
  2. 直接拼接SQL字符串存在SQL注入风险,同时容易因字符串转义问题引发语法错误。

正确解决方案

假设你的files列是MySQL的JSON类型,直接将JSON字符串作为值插入即可,无需使用JSON_OBJECT(),同时必须使用参数化查询避免注入和语法问题:

修正后的后端代码

app.post('/', upload.array('files'), (req,res) => {
    let firstName = req.body.firstName;
    let lastName = req.body.lastName;
    let filesJson = JSON.stringify(req.files);
    // 使用参数占位符?,避免直接拼接SQL
    let postQuery = "INSERT INTO product (firstName, lastName, files) VALUES (?, ?, ?);";
    // 传递参数数组,让MySQL驱动自动处理转义和类型
    connection.query(postQuery, [firstName, lastName, filesJson], (err, result, fields) => {
        if (err) { throw err };
        res.send('Response has been recorded...');
    })
})

关键说明

  • 当files列是JSON类型时,MySQL会自动识别传入的JSON字符串并存储为JSON格式。
  • 参数化查询(用?占位符)是处理SQL插入的标准做法,既避免了语法错误,又杜绝了SQL注入风险。
  • 无需对JSON字符串做额外处理,JSON.stringify(req.files)已经生成了符合MySQL要求的JSON格式字符串。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 07:22:32