为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

牛魔王的故事 2019-07-03 14:31:29
为什么有人会在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
查看完整描述

3 回答

?
明月笑刀无情

TA贡献1828条经验 获得超4个赞

如果条件列表在编译时不知道,而是在运行时生成,则不必担心是否有一个或多个条件。您可以生成它们,如下所示:

and <condition>

把它们连在一起。带着1=1在开始的时候,and有什么可联系的。

我从来没有见过这个用于任何类型的注射保护,就像你说的那样,它似乎不会有多大帮助。我把它看作是一种实现上的方便。SQL查询引擎将最终忽略1=1因此,它不应该对性能产生影响。


查看完整回答
反对 回复 2019-07-03
?
杨魅力

TA贡献1811条经验 获得超6个赞

只需在Greg的回答中添加一个示例代码:

dim sqlstmt as new StringBuilder
sqlstmt.add("SELECT * FROM Products")sqlstmt.add(" WHERE 1=1") ''// From now on you don't have to worry if you must 
''// append AND or WHERE because you know the WHERE is thereIf ProductCategoryID <> 0 then
  sqlstmt.AppendFormat(" AND ProductCategoryID = {0}", trim(ProductCategoryID))end ifIf MinimunPrice > 0 then
  sqlstmt.AppendFormat(" AND Price >= {0}", trim(MinimunPrice))end if


查看完整回答
反对 回复 2019-07-03
?
凤凰求蛊

TA贡献1825条经验 获得超4个赞

我见过条件数目可以可变时使用它。

您可以使用“和”字符串连接条件。然后,不要计算传入的条件数,而是将“WHERE 1=1”放在STOCK SQL语句的末尾,然后抛出连接的条件。

基本上,它可以使您不必对条件进行测试,然后在它们之前添加一个“WHERE”字符串。


查看完整回答
反对 回复 2019-07-03
  • 3 回答
  • 0 关注
  • 808 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信