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

使用Node.js mysql2查询JSON字段时如何转义作为键的用户输入

正确实现方案

方案1:使用预编译参数绑定(最推荐)

mysql2的参数占位符会自动对传入内容做转义处理,完全规避SQL注入风险,你可以直接把整个JSON路径作为参数传入:

// userInputKey 是用户输入的JSON键名,比如 'foo'
const userInputKey = 'foo'
const [result] = await connection.query(
  'SELECT name, someObject->>? as slice FROM someTable',
  [`$.${userInputKey}`]
)

这种方式不需要手动处理任何转义逻辑,完全由mysql2底层实现,安全性最高。

方案2:手动转义后拼接SQL

如果你的场景需要先拼接完整SQL语句再执行,可以使用mysql2内置的escape方法处理JSON路径字符串:

const userInputKey = 'foo'
const jsonPath = connection.escape(`$.${userInputKey}`)
const sql = `SELECT name, someObject->>${jsonPath} as slice FROM someTable`
const [result] = await connection.query(sql)

补充说明

两种方案最终执行的SQL逻辑和硬编码写法完全一致,针对示例数据会返回预期的slice: "bar"结果,同时会自动处理用户输入中的单引号、反斜杠等特殊字符,不会产生SQL注入风险。
如果业务不允许用户输入嵌套路径(比如包含.的键名),可以额外增加对userInputKey的字符校验逻辑即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 08:06:00