题
我在 SQL 语句中使用正则表达式来创建一个如下所示的应用程序
SELECT * FROM 表 WHERE id = {{REPLACEME}}
但是,有时我不会提供用于替换该字符串的参数。有没有办法用与任何东西相匹配的东西来替换它。我尝试过*,但这不起作用。
解决方案
替换{{REPLACEME}}与
[someValidValueForYouIdType] OR 1=1
其他提示
SELECT * FROM table WHERE id = id
将匹配所有非空行id
SELECT * FROM table WHERE id = id OR id IS NULL
将匹配所有行。
id
可能是主键,因此您可以使用前者。
我只能形容我的一个示例性的解决方案。所述@AllRec
是一个参数:
Declare @AllRec bit
set @AllRec = {0|1} --as appropriate
SELECT *
FROM table
WHERE
(
id = {{REPLACEME}}
and @AllRec = 0
) OR (
@AllRec = 1
)
在此方案中,如果@AllRec
是1,那么一切被返回,忽略id
滤波器。如果@AllRec
是零,那么id
应用过滤器,你会得到一个行。你应该能够很快适应这个到您当前的正则表达式的解决方案。
使用正则表达式 - 替换选项会打开你到SQL注入攻击。
假设你的语言已经为参数化查询的支持,尽量雅各布的回答这个修改后的版本:
SELECT * FROM table WHERE (id = @id OR @id IS NULL)
美中不足的是,你总是要提供@id值。
SELECT field1, field2
FROM dbo.yourTable
WHERE id = isnull(@var, id)
不知道你使用的是什么语言,而这种代码那种让我害怕,但...
var statement = "SELECT * FROM table";
If REPLACEME is not empty Then
statement += " WHERE id = {{REPLACEME}}"
End If
不隶属于 StackOverflow