使用 exec 或 execute 防止在查询中注入 SQL
Prevent SQL injection in queries with exec or execute
我正在使用 Visual Studio 2017 开发一个报告网站。我所有的 SQL 查询都已参数化并且可以正常工作。问题出在某些具有 exec 命令的查询中,例如在过程中。
例如:
而不是SELECT * FROM tabla WHERE id=@id
我放了 exec('SELECT * FROM tabla WHERE id=@id')
exec 案例不起作用。错误信息是:
Must declare the scalar variable ""@id""." & vbCrLf & "Must declare the scalar variable ""@id""."
Anyone knows a possible solution?
非常感谢!
如果您在 "parameterizable" 个位置使用参数(即您不尝试参数化 table/column 个名称),您可以使用 sp_executesql
继续使用参数:
exec sp_executesql N'select * from tabla where id=@id',N'@id int',@id = @id
使用 exec
创建一个无法访问任何外部 variables/parameters 的新上下文,但 sp_executesql
允许您将变量显式传递到内部上下文。 (不要求内部变量名和外部变量名相同,但保持相同通常是最简单的)
我正在使用 Visual Studio 2017 开发一个报告网站。我所有的 SQL 查询都已参数化并且可以正常工作。问题出在某些具有 exec 命令的查询中,例如在过程中。
例如:
而不是SELECT * FROM tabla WHERE id=@id
我放了 exec('SELECT * FROM tabla WHERE id=@id')
exec 案例不起作用。错误信息是:
Must declare the scalar variable ""@id""." & vbCrLf & "Must declare the scalar variable ""@id""." Anyone knows a possible solution?
非常感谢!
如果您在 "parameterizable" 个位置使用参数(即您不尝试参数化 table/column 个名称),您可以使用 sp_executesql
继续使用参数:
exec sp_executesql N'select * from tabla where id=@id',N'@id int',@id = @id
使用 exec
创建一个无法访问任何外部 variables/parameters 的新上下文,但 sp_executesql
允许您将变量显式传递到内部上下文。 (不要求内部变量名和外部变量名相同,但保持相同通常是最简单的)