相关疑难解决方法(0)

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

为什么有人会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
Run Code Online (Sandbox Code Playgroud)

sql dynamic-sql

246
推荐指数
13
解决办法
19万
查看次数

为什么要在SQL中使用WHERE 1 = 0语句?

我在应用程序的日志文件中看到了一个查询.它包含一个类似的查询:

SELECT ID FROM CUST_ATTR49 WHERE 1=0
Run Code Online (Sandbox Code Playgroud)

这样一个查询的用途是什么,必然会返回什么?

sql database where-clause

33
推荐指数
4
解决办法
4万
查看次数

在SQL语句中使用WHERE 1 = 1的目的是什么?

可能的重复:
为什么sql查询具有"where 1 = 1"
为什么有人在SQL子句中使用WHERE 1 = 1 AND <conditions>?

我在不同的查询示例中看到了很多,它可能适用于所有SQL引擎.

如果存在没有定义条件的查询,则人们(特别是ORM框架)通常会添加始终为真的条件WHERE 1 = 1或类似的东西.

而不是

SELECT id, name FROM users;
Run Code Online (Sandbox Code Playgroud)

他们使用

SELECT id, name FROM users WHERE 1 = 1;
Run Code Online (Sandbox Code Playgroud)

我可以想到的唯一可能的原因是,如果你动态添加条件,你不必担心剥离初始条件,AND但是1 = 1如果查询中存在实际条件,则通常会剥离此条件.

CakePHP的实际示例(由框架生成):

(没有条件)

SELECT `User`.`id`, `User`.`login`
FROM `users` AS `User` WHERE 1 = 1 
ORDER BY `User`.`id` ASC;
Run Code Online (Sandbox Code Playgroud)

(有条件)

SELECT `User`.`id`, `User`.`login`
FROM `users` AS `User` 
WHERE `User`.`login` = 'me@example.com'
LIMIT 1;
Run Code Online (Sandbox Code Playgroud)

是否有任何理由增加额外的条件?

sql where conditional-statements

17
推荐指数
4
解决办法
9万
查看次数