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

已验证格式的JSON字符串无法插入MySQL表,求排查解决

问题原因与解决方案

核心问题

你的代码直接拼接SQL字符串,导致JSON中的双引号与SQL语句的外层双引号冲突,引发语法错误,同时这种写法还存在严重的SQL注入风险。

从错误日志里的SQL语句能明显看到问题:

INSERT INTO registered 
 (name, panels) 
 VALUES ("safas", "{\"panels\":[\"uti\",\"wound\"]}")

JSON字符串里的\"panels\"会被MySQL解析为未闭合的引号,直接触发语法错误。

正确解决方法

使用参数化查询(预处理语句),让数据库驱动自动处理参数的类型转换和转义,这是操作数据库的标准安全做法,也能彻底解决JSON插入的语法问题。

修改后的Node.js代码如下:

app.post("/registered", (req, res) => {
  let data = req.body;
  // 使用?作为占位符,避免直接拼接字符串
  let sqlPost = `INSERT INTO registered (name, panels) VALUES (?, ?)`;
  // 将参数放在数组中传递,数据库驱动会自动处理类型和转义
  db.query(sqlPost, [data.name, data.panels], (error, result) => {
    if (error) return res.json(error);
    res.send({
      message: "Registered.",
    });
  });
});

额外说明

  • 如果你使用的是mysql2等驱动,参数化查询会自动识别JSON类型,无需手动处理引号或转义。
  • 永远不要直接将用户输入拼接进SQL语句,这会导致SQL注入攻击,参数化查询是最安全的解决方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 11:39:53