当前位置: 首页 > 面试题库 >

为什么有人使用WHERE 1 = 1 AND 在SQL子句中?

郭洋
2023-03-14
问题内容

为什么有人WHERE 1=1 AND <conditions>在SQL子句中使用(通过连接字符串获得的两种SQL,无论哪种视图定义)

我在某个地方看到过,它将被用来防止SQL注入,但是看起来很奇怪。

如果进行注射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有一些与之交往。

我从未见过将它用于任何形式的注入保护,因为您说这似乎并没有太大帮助。我 已经将
其用作实现的便利。SQL查询引擎最终将忽略1=1它,因此它不会对性能产生影响。



 类似资料:
  • 问题内容: 我试图了解使用以下命令创建列表的新实例之间的区别: 和 据我了解,稍后将返回一个不可变的列表。这意味着无法添加,删除或修改它。我想知道为什么会创建一个不可变的emptyList?有什么用?谢谢 问题答案: 假设您必须返回一个集合,并且您不想每次都创建几个对象。 返回空集合通常比返回更可取

  • 问题内容: 在我的表中,我有一个可为空的bit列(旧系统…),另一位开发人员最近对存储过程进行了更改,以仅显示bit列不为真的值(1)。因为这是一个可为空的列,所以我们注意到,如果该列为NULL,则不会选择该记录。为什么是这样? 我和其他开发人员都同意NULL <> 1 …这是SQL中的错误还是设计这种方式?似乎是设计缺陷。 当前代码: 建议的修复: (Jon Erickson) VoidedIn

  • 问题内容: “&”在这里是什么意思: 问题答案: 这称为位掩码。它用于数字中各个位具有不同含义的情况,而不是数字仅表示数字本身(例如,如果您将年龄保存到数据库中)。 当您以二进制形式想象任何数字并想测试数字中是否设置了某个位时,可以通过对数字和要测试的位使用二进制AND运算符来对其进行测试,如下所示: 用二进制表示,这意味着以下内容(假设您的数字是25): 在这里您可以看到,第5位的数字(从下至上

  • 问题内容: 声明带有或不带有“ where”子句的泛型超类的这两种方法之间有什么区别? 问题答案: Swift指南中明确说明了这一点: 通用where子句中的要求指定类型参数从类继承或符合协议或协议组成。尽管泛型where子句提供了语法糖来表达对类型参数的简单约束(例如,等价于等),但是您可以使用它为类型参数及其关联的类型提供更复杂的约束。例如,您可以约束类型参数的关联类型以符合协议。例如,指定符

  • 问题内容: 我是一名Android开发人员,最近遇到了SQLite中的GLOB子句。考虑到LIKE已经到位,我不明白为什么我们需要GLOB。 这两个子句都有通配符来表示单个和多个字符。唯一的区别是GLOB区分大小写。 但是,这就是全部吗?是否有任何疑问是LIKE不好或不合适的选择?在任何情况下,我们绝对必须使用GLOBE vs LIKE,反之亦然? 问题答案: 区分大小写本身是有用的,因为它与常规

  • 问题内容: 我见过的几乎每个Java项目都使用Maven或Ant。它们是很好的工具,我认为几乎任何项目都可以使用它们。但是,什么都发生在使?它用于各种非Java项目,并且可以轻松处理Java。当然,如果使用Windows,则必须下载make.exe,但JDK并不随附Ant和Maven。 与Java一起使用时,make是否存在一些基本缺陷?仅仅是因为Ant和Maven是用Java编写的吗? 问题答案