为什么有人会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) 我在应用程序的日志文件中看到了一个查询.它包含一个类似的查询:
SELECT ID FROM CUST_ATTR49 WHERE 1=0
Run Code Online (Sandbox Code Playgroud)
这样一个查询的用途是什么,必然会返回什么?
可能的重复:
为什么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)
是否有任何理由增加额外的条件?