向MySQL JSON字段插入数据遇语法错误,求解决方案
问题分析与解决方法
错误原因
你当前的SQL语法错误源于两个核心问题:
- 误用MySQL的
JSON_OBJECT()函数:该函数需要传入键值对参数(如JSON_OBJECT('field1', val1, 'field2', val2))生成JSON对象,但你直接传入了完整的JSON数组字符串,导致MySQL无法解析语法。 - 直接拼接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
相关产品推荐
相关产品推荐

