为什么有人会WHERE 1=1 AND <conditions>在 SQL 子句中使用(无论是通过连接字符串获得的 SQL,还是视图定义)
WHERE 1=1 AND <conditions>
我在某处看到这将用于防止 SQL 注入,但这似乎很奇怪。
如果有注入WHERE 1 = 1 AND injected OR 1=1将有相同的结果injected OR 1=1。
WHERE 1 = 1 AND injected OR 1=1
injected OR 1=1
稍后编辑:视图定义中的用法如何?
谢谢您的回答。
不过,我不明白为什么有人会使用这种构造来定义视图,或者在存储过程中使用它。
以此为例:
CREATE VIEW vTest AS SELECT FROM Table WHERE 1=1 AND table.Field=Value
如果条件列表在编译时未知,而是在运行时构建,则您不必担心是否有一个或多个条件。你可以像这样生成它们:
and <condition>
并将它们连接在一起。在1=1开头,首字母and有一些关联。
1=1
and
我从未见过它用于任何类型的注射保护,正如你所说,它似乎没有多大帮助。我 已经 看到它被用作实现便利。SQL 查询引擎最终会忽略它,1=1因此它应该不会影响性能。