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
相关产品推荐
相关产品推荐

