为什么有人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它,因此它不会对性能产生影响。