mysql语句1=1_mysql - “where 1 = 1”语句
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”语句相关推荐
- MySQL查询本年的数据的sql语句
MySQL查询本年的数据的sql语句: SELECT * FROM 表名 WHERE YEAR(时间字段)=YEAR(NOW());
- mysql五补充部分:SQL逻辑查询语句执行顺序
mysql五补充部分:SQL逻辑查询语句执行顺序一 SELECT语句关键字的定义顺序 二 SELECT语句关键字的执行顺序 三 准备表和数据 四 准备SQL逻辑查询测试语句 五 执行顺序分析 一 SE ...
- mysql支持asp.net_关于Mysql + asp.net注射能支持多语句的感慨(2月)
关于Mysql + asp.net注射能支持多语句的感慨 2010-09-07 03:32 在一篇老外的文章里面看到一个图表,致使Mysql + Asp.Net 注入时支持多语句 真的?有点不信,测试 ...
- mysql查找执行效率慢的SQL语句
启动Mysql时加参数--log-slow-queries来记录执行时间超过long_query_time秒的sql MySQL 自带 slow log 的分析工具 mysqldumpslow. sl ...
- MySQL InnoDB 锁介绍及不同 SQL 语句分别加什么样的锁
作者:iceman1952(本文来自作者投稿) 本文中,我们详细介绍MySQL InnoDB存储引擎各种不同类型的锁,以及不同SQL语句分别会加什么样的锁. 阅读提示 1. 本文所参考的MySQL文档 ...
- go mysql 查询语句_01 MySQL-初识MySQL-查询语句的执行流程-Go语言中文社区
MySQL的基础架构 我们通过一条查询语句来看看MySQL是如何执行的,同时通过这条语句的执行,了解MySQL的整体架构体系.mysql> select * from T where ID=1: ...
- mysql insert 语句优化_分享insert into语句优化的小技巧
MYSQL批量插入数据库实现语句性能分析 假定我们的表结构如下 代码如下CREATE TABLE example ( example_id INT NOT NULL, name VARCHAR( 50 ...
- mysql 关联查询慢_mysql慢查询语句分析总结
我们经常会接触到MySQL,也经常会遇到一些MySQL的性能问题.我们可以借助慢查询日志和explain命令初步分析出SQL语句存在的性能问题 通过SHOW FULL PROCESSLIST查看问题 ...
- mysql居左查询abcd_数据库--查询语句
查询语句 mysql中要学习的知识:多表关系,查询语句,索引 添加数据补充 将一个查询结果插入到另一张表中 create table student(name char(10), gender int ...
最新文章
- Linux系统下载linux系统源码
- cppcheck编译安装命令
- Openwrt系统初始时间
- python科学计数法输出_python不以科学计数法输出的实例方法总结
- PHP 判断是否包含某字符串
- 百度推出Apollo 3.5和Apollo Enterprise
- MIT新研究:基于基本运动能力让机器人自主学习,感知世界
- 为什么vi用HJKL和ESC
- 升级ubuntu后EMACS 无法使用
- 深度多模态子空间聚类网络+代码实现
- 现在哪里有卖鸡腿面包的?
- IMX6ULL - 移植uboot-imx_v2020.04_5.4.70_2.3.0
- HTML+CSS实现淘宝静态页面
- PHP实现对小程序微信支付v2订单的结果查询
- 服务器主板插显卡进不了系统,我的主板插上显卡后按电源,开不了机怎么办?...
- 你听过最美的网名是什么?
- 解决用pyinstaller打包python程序,生成的.exe文件过大问题
- Unity3D引擎之渲染技术系列三
- “构建之法”--第一次作业-阅读与准备工作
- 独立思考模型与经验-仅供参考
热门文章
- 力扣112. 路径总和(JavaScript)
- html元素中的click属性,从HTML中的onClick属性调用jQuery方法
- docker和数据卷问题探究
- 职业中专计算机高考英语卷子,职业高中高考计算机专业试卷3.doc
- python可以做力扣的题吗_力扣题目练习一
- go tcp客户端自动重连_阿里面试: HTTP、HTTPS、TCP/IP、三次握手四次挥手过程?(附全网最具深度讲解)
- kafka redis vs 发布订阅_对比平台--Redis Vs Kafka 之间的区别
- mysql的service name_安装MYSQL出错:a windows service with the name MYSQL already...service解决...
- c语言割线法解非线性方程,用割线法解非线性方程组.doc
- java 有序map_Java有序的Hash集合:LinkedHashMap