猿问

为什么有人会在SQL子句中使用WHERE 1=1和<初始条件>?

为什么有人会在SQL子句中使用WHERE 1=1和<初始条件>?

为什么有人会用WHERE 1=1 AND <conditions>在SQL子句中(通过串连字符串获得的SQL或视图定义)

我在某些地方看到,这将用于防止SQL注入,但这似乎非常奇怪。

如果有注射WHERE 1 = 1 AND injected OR 1=1会有同样的结果injected OR 1=1.

稍后编辑:视图定义中的用法如何?


谢谢你的回答。

不过,我还是不明白为什么有人会用这个构造来定义视图,或者在存储过程中使用它。

举个例子:

CREATE VIEW vTest ASSELECT FROM Table WHERE 1=1 AND table.Field=Value


牛魔王的故事
浏览 809回答 3
3回答

明月笑刀无情

如果条件列表在编译时不知道,而是在运行时生成,则不必担心是否有一个或多个条件。您可以生成它们,如下所示:and&nbsp;<condition>把它们连在一起。带着1=1在开始的时候,and有什么可联系的。我从来没有见过这个用于任何类型的注射保护,就像你说的那样,它似乎不会有多大帮助。我有把它看作是一种实现上的方便。SQL查询引擎将最终忽略1=1因此,它不应该对性能产生影响。

杨魅力

只需在Greg的回答中添加一个示例代码:dim&nbsp;sqlstmt&nbsp;as&nbsp;new&nbsp;StringBuilder sqlstmt.add("SELECT&nbsp;*&nbsp;FROM&nbsp;Products")sqlstmt.add("&nbsp;WHERE&nbsp;1=1")&nbsp;''//&nbsp;From&nbsp;now&nbsp;on&nbsp;you&nbsp;don't&nbsp;have&nbsp;to&nbsp;worry&nbsp;if&nbsp;you&nbsp;must&nbsp; ''//&nbsp;append&nbsp;AND&nbsp;or&nbsp;WHERE&nbsp;because&nbsp;you&nbsp;know&nbsp;the&nbsp;WHERE&nbsp;is&nbsp;thereIf&nbsp;ProductCategoryID&nbsp;<>&nbsp;0&nbsp;then &nbsp;&nbsp;sqlstmt.AppendFormat("&nbsp;AND&nbsp;ProductCategoryID&nbsp;=&nbsp;{0}",&nbsp;trim(ProductCategoryID))end&nbsp;ifIf&nbsp;MinimunPrice&nbsp;>&nbsp;0&nbsp;then &nbsp;&nbsp;sqlstmt.AppendFormat("&nbsp;AND&nbsp;Price&nbsp;>=&nbsp;{0}",&nbsp;trim(MinimunPrice))end&nbsp;if

凤凰求蛊

我见过条件数目可以可变时使用它。您可以使用“和”字符串连接条件。然后,不要计算传入的条件数,而是将“WHERE 1=1”放在STOCK SQL语句的末尾,然后抛出连接的条件。基本上,它可以使您不必对条件进行测试,然后在它们之前添加一个“WHERE”字符串。
随时随地看视频慕课网APP
我要回答