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

Node.js操作SQL Server参数化查询防SQL注入报错如何解决?

问题原因

你遇到的报错确实和tedious驱动的参数语法规范相关:SQL Server 原生不支持:前缀、?作为参数占位符,tedious作为Node.js生态下的SQL Server适配驱动,遵循SQL Server的原生参数规则,要求参数占位符使用@前缀,同时参数传递需要符合驱动要求的格式。

正确的参数化查询写法

推荐使用request().input()的标准写法,兼容所有版本的tedious和node-mssql封装:

let conn = await sql.connect(process.env.connectionSetup)
let recordset = await conn.request()
  // 第一个参数对应SQL里的@policy,第二个参数是数据库字段对应的数据类型,第三个是参数值
  .input('policy', sql.Int, 912)
  .query("select * from POLICIES where policyid=@policy")
res.json(recordset)

补充说明

  • 不要遗漏input方法的第二个参数(数据类型声明),需要和你数据库中policyid字段的实际类型匹配,比如字段是字符串类型就替换为sql.VarChar,避免隐式类型转换带来的查询异常
  • 你之前尝试的:/?占位符是MySQL、PostgreSQL等其他数据库的参数语法,不适配SQL Server生态

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 16:45:00