我在 SQL 语句中使用正则表达式来创建一个如下所示的应用程序

SELECT * FROM 表 WHERE id = {{REPLACEME}}

但是,有时我不会提供用于替换该字符串的参数。有没有办法用与任何东西相匹配的东西来替换它。我尝试过*,但这不起作用。

有帮助吗?

解决方案

替换{{REPLACEME}}与

[someValidValueForYouIdType] OR 1=1

其他提示

  1. SELECT * FROM table WHERE id = id 将匹配所有非空行 id
  2. 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


许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top