提问人:Pablo pas 提问时间:8/30/2017 最后编辑:boop_the_snootPablo pas 更新时间:8/30/2017 访问量:501
使用 exec 或 execute 防止查询中的 SQL 注入
Prevent SQL injection in queries with exec or execute
问:
我正在使用 Visual Studio 2017 开发报告 Web。我所有的 SQL 查询都已参数化并正常工作。问题出在一些具有 exec 命令的查询中,例如在过程中。
例如:
而不是
我把SELECT * FROM tabla WHERE id=@id
exec('SELECT * FROM tabla WHERE id=@id')
exec 案例不起作用。错误消息为:
必须声明标量变量 “”@id“”.“ & vbCrLf & ”必须声明标量变量 “”@id“”。 有人知道可能的解决方案吗?
多谢!
答:
4赞
Damien_The_Unbeliever
8/30/2017
#1
如果您在“可参数化”位置使用参数(即您没有尝试参数化表/列名称),则可以使用 sp_executesql
继续使用参数:
exec sp_executesql N'select * from tabla where id=@id',N'@id int',@id = @id
using 创建一个新上下文,该上下文无权访问任何外部变量/参数,但允许您显式将变量传递到内部上下文中。(不要求内部和外部变量名称相同,但保持它通常是最简单的)exec
sp_executesql
评论
sp_executesql
Where()
OrderBy()