我有一个接受输入@featuretype 的 sp。 @featuretype 将等于“mobile”、“login”或“index”,并将对应于数据库中的一列。
在我的 sp 我有:
EXEC(
'select TOP 3 * from featuredtypes_v where'+' featuredtypes_v.'+@featuretype+'Page=1'+
' order by featuredtypes_v.priority desc'
)
但是,有人告诉我这会打开 db 以进行 sql 注入(inject)。我的两个问题是,为什么会这样,我还可以如何编写此查询以避免这种情况?
最佳答案
你为什么不使用 case
?
select TOP 3 *
from featuredtypes_v F
where
case
when @featuretype = 'mobile' then F.MobilePage
when @featuretype = 'login' then F.LoginPage
when @featuretype = 'index' then F.IndexPage
end
= 1
关于sql - 使用动态 sql 的替代方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12058159/