我有一个接受输入@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/

10-09 02:49