mysql - “where 1 = 1”语句

可能重复:

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

我看到有些人使用语句来查询MySQL数据库中的表,如下所示:

select * from car_table where 1=1 and value="TOYOTA"

但1=1在这里意味着什么?

Mellon asked 2019-03-14T13:33:56Z

10个解决方案

301 votes

通常当人们建立SQL语句时。

当您添加and value = "Toyota"时,您不必担心之前是否有条件或只是WHERE。 优化者应该忽略它

没有魔力,只是实用

示例代码:

commandText = "select * from car_table where 1=1";

if (modelYear <> 0) commandText += " and year="+modelYear

if (manufacturer <> "") commandText += " and value="+QuotedStr(manufacturer)

if (color <> "") commandText += " and color="+QuotedStr(color)

if (california) commandText += " and hasCatalytic=1"

否则你必须有一套复杂的逻辑:

commandText = "select * from car_table"

whereClause = "";

if (modelYear <> 0)

{

if (whereClause <> "")

whereClause = whereClause + " and ";

commandText += "year="+modelYear;

}

if (manufacturer <> "")

{

if (whereClause <> "")

whereClause = whereClause + " and ";

commandText += "value="+QuotedStr(manufacturer)

}

if (color <> "")

{

if (whereClause <> "")

whereClause = whereClause + " and ";

commandText += "color="+QuotedStr(color)

}

if (california)

{

if (whereClause <> "")

whereClause = whereClause + " and ";

commandText += "hasCatalytic=1"

}

if (whereClause <> "")

commandText = commandText + "WHERE "+whereClause;

gbn answered 2019-03-14T13:34:30Z

48 votes

如果该查询是动态构建的,原始作者可能不想考虑一组空条件,因此以这样的结尾:

sql = "select * from car_table where 1=1"

for each condition in condition_set

sql = sql + " and " + condition.field + " = " + condition.value

end

Rubens Farias answered 2019-03-14T13:34:57Z

36 votes

1=1永远是真的,所以1=1位是重要的一位。

你可以在几个场景中得到这个,包括:

生成的SQL:如果您不必添加第一个条件,则更容易创建生成复杂的1=1语句,因此通常会在开头放置1=1,并且可以追加所有其他条件 与And

调试:有时您会看到人们在where条件的顶部放入1=1,因为它使他们能够在调试查询时自由地切换和更改其余条件。 例如

select * from car_table

where 1=1

--and value="TOYOTA"

AND color="BLUE"

--AND wheels=4

必须要说的是,这不是特别好的做法,通常不应该出现在生产代码中。 它甚至可能无法帮助优化查询。

Jon Egerton answered 2019-03-14T13:35:56Z

31 votes

除了所有其他答案,它是一种简单的SQL注入攻击技术。 如果您向某些SQL添加OR where 1=1语句,那么由于表达式的固有真实性,它将返回所有结果。

Jeff Foster answered 2019-03-14T13:36:23Z

13 votes

它只是一个永远真实的表达。 有些人用它作为解决方法。

他们有一个静态语句,如:

select * from car_table where 1=1

所以他们现在可以在where子句中添加一些内容

and someother filter

Udo Held answered 2019-03-14T13:37:13Z

4 votes

1 = 1其中condition始终为true,因为always 1等于1,因此该语句将始终为true。虽然它有时没有任何意义。 但其他时候开发人员在动态生成where条件时使用它。

例如,让我们看看这段代码

//not that this is just example

//do not use it like that in real environment because it security issue.

$cond = $_REQUEST['cond'];

if ($cond == "age"){

$wherecond = " age > 18";

}

$query = "select * from some_table where $wherecond";

?>

所以在上面的例子中,如果$ _REQUEST ['cond']不是“age”,则查询将返回mysql错误,因为在where条件之后没有任何内容。

查询将从some_table中选择*,其中是错误

解决这个问题(至少在这个不安全的例子中)我们使用

//not that this is just example

//do not use it like that in real environment because it security issue.

$cond = $_REQUEST['cond'];

if ($cond == "age"){

$wherecond = " age > 18";

} else {

$wherecond = " 1=1";

}

$query = "select * from some_table where $wherecond";

?>

所以现在如果$ _REQUEST ['cond']不是年龄,则$ wherecond将为1 = 1,因此查询将不会返回mysql错误。

查询将从some_table中选择*,其中1 = 1并避免mysql错误

希望你理解当我们使用1 = 1的同时注意上面的例子不是现实世界的例子,它只是为了向你展示这个想法。

Mohammed Shannaq answered 2019-03-14T13:38:30Z

4 votes

大多数时间开发人员使用这些类型的查询,如果他正在开发查询构建器类型应用程序或构建一些复杂的SQL查询,那么与select语句字符串一起添加条件子句其中1 = 1,并且在程序中不需要添加任何检查 它。

Farhan Alam answered 2019-03-14T13:38:57Z

2 votes

查询查找1等于1且值等于'TOYOTA'的所有行。 所以在这种情况下它是无用的,但是如果省略WHERE语句,使用WHERE 1 = 1来提醒您选择不使用WHERE子句是个好主意。

toon81 answered 2019-03-14T13:39:25Z

1 votes

在动态传递条件时,使用此函数会出现在复杂查询中,您可以使用“AND”字符串连接条件。 然后,不是计算您传入的条件数,而是在库存SQL语句的末尾放置一个“WHERE 1 = 1”并抛出连接条件。

不需要使用1 = 1你可以使用0 = 0 2 = 2,3 = 3,5 = 5 25 = 25 ......

select * from car_table where 0=0 and value="TOYOTA"

在这里你也会得到相同的结果,如1 = 1条件

因为所有这些案例总是真实的表达

1=1 is alias for true

Nighil answered 2019-03-14T13:40:12Z

0 votes

当我需要动态应用过滤器时,我这样做了。

比如,虽然编码我不知道将应用多少过滤器用户(fld1 = val1和fld2 = val2和...)

所以,重复声明“和fld = val”我以“1 = 1”开头。

因此,我不需要修改声明中的第一个“和”。

BobbyGoks answered 2019-03-14T13:41:06Z

mysql语句1=1_mysql - “where 1 = 1”语句相关推荐

  1. MySQL查询本年的数据的sql语句

    MySQL查询本年的数据的sql语句: SELECT * FROM 表名 WHERE YEAR(时间字段)=YEAR(NOW());

  2. mysql五补充部分:SQL逻辑查询语句执行顺序

    mysql五补充部分:SQL逻辑查询语句执行顺序一 SELECT语句关键字的定义顺序 二 SELECT语句关键字的执行顺序 三 准备表和数据 四 准备SQL逻辑查询测试语句 五 执行顺序分析 一 SE ...

  3. mysql支持asp.net_关于Mysql + asp.net注射能支持多语句的感慨(2月)

    关于Mysql + asp.net注射能支持多语句的感慨 2010-09-07 03:32 在一篇老外的文章里面看到一个图表,致使Mysql + Asp.Net 注入时支持多语句 真的?有点不信,测试 ...

  4. mysql查找执行效率慢的SQL语句

    启动Mysql时加参数--log-slow-queries来记录执行时间超过long_query_time秒的sql MySQL 自带 slow log 的分析工具 mysqldumpslow. sl ...

  5. MySQL InnoDB 锁介绍及不同 SQL 语句分别加什么样的锁

    作者:iceman1952(本文来自作者投稿) 本文中,我们详细介绍MySQL InnoDB存储引擎各种不同类型的锁,以及不同SQL语句分别会加什么样的锁. 阅读提示 1. 本文所参考的MySQL文档 ...

  6. go mysql 查询语句_01 MySQL-初识MySQL-查询语句的执行流程-Go语言中文社区

    MySQL的基础架构 我们通过一条查询语句来看看MySQL是如何执行的,同时通过这条语句的执行,了解MySQL的整体架构体系.mysql> select * from T where ID=1: ...

  7. mysql insert 语句优化_分享insert into语句优化的小技巧

    MYSQL批量插入数据库实现语句性能分析 假定我们的表结构如下 代码如下CREATE TABLE example ( example_id INT NOT NULL, name VARCHAR( 50 ...

  8. mysql 关联查询慢_mysql慢查询语句分析总结

    我们经常会接触到MySQL,也经常会遇到一些MySQL的性能问题.我们可以借助慢查询日志和explain命令初步分析出SQL语句存在的性能问题 通过SHOW FULL PROCESSLIST查看问题 ...

  9. mysql居左查询abcd_数据库--查询语句

    查询语句 mysql中要学习的知识:多表关系,查询语句,索引 添加数据补充 将一个查询结果插入到另一张表中 create table student(name char(10), gender int ...

最新文章

  1. Linux系统下载linux系统源码
  2. cppcheck编译安装命令
  3. Openwrt系统初始时间
  4. python科学计数法输出_python不以科学计数法输出的实例方法总结
  5. PHP 判断是否包含某字符串
  6. 百度推出Apollo 3.5和Apollo Enterprise
  7. MIT新研究:基于基本运动能力让机器人自主学习,感知世界
  8. 为什么vi用HJKL和ESC
  9. 升级ubuntu后EMACS 无法使用
  10. 深度多模态子空间聚类网络+代码实现
  11. 现在哪里有卖鸡腿面包的?
  12. IMX6ULL - 移植uboot-imx_v2020.04_5.4.70_2.3.0
  13. HTML+CSS实现淘宝静态页面
  14. PHP实现对小程序微信支付v2订单的结果查询
  15. 服务器主板插显卡进不了系统,我的主板插上显卡后按电源,开不了机怎么办?...
  16. 你听过最美的网名是什么?
  17. 解决用pyinstaller打包python程序,生成的.exe文件过大问题
  18. Unity3D引擎之渲染技术系列三
  19. “构建之法”--第一次作业-阅读与准备工作
  20. 独立思考模型与经验-仅供参考

热门文章

  1. 力扣112. 路径总和(JavaScript)
  2. html元素中的click属性,从HTML中的onClick属性调用jQuery方法
  3. docker和数据卷问题探究
  4. 职业中专计算机高考英语卷子,职业高中高考计算机专业试卷3.doc
  5. python可以做力扣的题吗_力扣题目练习一
  6. go tcp客户端自动重连_阿里面试: HTTP、HTTPS、TCP/IP、三次握手四次挥手过程?(附全网最具深度讲解)
  7. kafka redis vs 发布订阅_对比平台--Redis Vs Kafka 之间的区别
  8. mysql的service name_安装MYSQL出错:a windows service with the name MYSQL already...service解决...
  9. c语言割线法解非线性方程,用割线法解非线性方程组.doc
  10. java 有序map_Java有序的Hash集合:LinkedHashMap