sql where 1=1 的详细解释
原文来自:https://blog.csdn.net/zc474235918/article/details/50544484
看一下这两个句子:
select * from user
select * from user where 1=1
这两个 句子执行结果是一样一样的。而sql注入就是利用了这个原理 来进行破坏。比如:
select * from user where id='1000'
如果允许用户输入的话,那么这个句子就成了:
select * from user where id='XXX' or 1=1
这样的话,这个句子就是恒成立的了。
上述1=1 的使用,会影响预先指定的查询结果,使得本来要查询的数据 失效。
where 1=1 这种写法 虽然给程序开发人员带来不便,还要避免sql注入的问题。 但 “1=1” 这种写法 也会给程序编写增加了方便。
1=1 可以很方便的规范语句
对于组合查询的来说,因为查询比较模糊,而查询的where条件的个数也不确定。
一般这样的sql语句进行查询的时候:
sql.append("select * from User");
if (whereUser.getID()!="") {
sql.append(" where ID=@id");
}
if (whereUser.getName()!="") {
sql.append(" and Name=@name");
}
if (whereUser.getAddress()!="") {
sql.append(" and Phone=@phone");
}
对于上述这种写法,逻辑上感觉没有问题。但是如果whereUser里面的id为空。那么最后拼接出来得到的语句会成:
select * from User and Name='XXX' and Phone='XXX'.
这条语句 没有where关键字,肯定会报错的。
但是如果说,既然条件个数未知,那么把where关键字放到 if外面去:
sql.append("select * from User");
sql.append("where");
if (whereUser.getID()!="") {
sql.append(" ID=@id");
}
if (whereUser.getName()!="") {
sql.append(" and Name=@name");
}
if (whereUser.getAddress()!="") {
sql.append(" and Phone=@phone");
}
这样写的话,如果三个条件都为空。则这是一条不带查询条件的查询。那么最后这条语句会被解析成:
select * from User where;
这条语句,空有where关键字 没有条件,照样会报错的。
对于解决上述这种未知的问题,只能进行各种情况的判断进行拼接。
当然可以用“where 1=1”进行代码的规范:
sql.append("select * from User where 1=1 ");
if (whereUser.getID()!="") {
sql.append(" and ID=@id");
}
if (whereUser.getName()!="") {
sql.append(" and Name=@name");
}
if (whereUser.getAddress()!="") {
sql.append(" and Phone=@phone");
}
对于上述的这种写法,无论是否有条件 都是可以成立的。
无条件的的时候:
select * from User where 1=1;
有条件的时候:
select * from User where 1=1 and id='XX' ……;
这样写的代码,会比 分情况判断的代码 更规范。对于以上的写法,并不是唯一的。也可以使 where ‘a’=’a’ 、’a’<>’b’等。
sql where 1=1 的详细解释的更多相关文章
- SQL Server 运行计划操作符具体解释(3)——计算标量(Compute Scalar)
接上文:SQL Server 运行计划操作符详细解释(2)--串联(Concatenation ) 前言: 前面两篇文章介绍了关于串联(Concatenation)和断言(Assert)操作符,本文介 ...
- cmd批处理转义字符%的详细解释
cmd批处理转义字符%的详细解释 在命令行中使用for时不需要双%,这源于命令解释器对命令行与批处理的处理方式不同. 1.%是个ESCAPE字符,通常将之译为转义字符,但也有更形象的译名脱逸字符.逃逸 ...
- .htaccess语法之RewriteCond与RewriteRule指令格式详细解释
htaccess语法之RewriteCond与RewriteRule指令格式详细解释 (2012-11-09 18:09:08) 转载▼ 标签: htaccess it 分类: 网络 上文htacc ...
- cookie的详细解释
突然看到网页上中英文切换的效果,不明白怎么弄得查了查 查到了cookie 并且附有详细解释 就copy留作 以后温习 http://blog.csdn.net/xidor/article/detail ...
- tar命令的详细解释
tar命令的详细解释 标签: linuxfileoutputbashinputshell 2010-05-04 12:11 235881人阅读 评论(12) 收藏 举报 分类: linux/unix ...
- Linux学习笔记15——GDB 命令详细解释【转】
GDB 命令详细解释 Linux中包含有一个很有用的调试工具--gdb(GNU Debuger),它可以用来调试C和C++程序,功能不亚于Windows下的许多图形界面的调试工具. 和所有常用的调试工 ...
- C语言 - 结构体(struct)比特字段(:) 详细解释
结构体(struct)比特字段(:) 详细解释 本文地址: http://blog.csdn.net/caroline_wendy/article/details/26722511 结构体(struc ...
- 姿势体系结构的详细解释 -- C
我基本上总结出以下4部分: 1.问题的足迹大小. 2.字节对齐问题. 3.特别保留位0. 4.这种结构被存储在存储器中的位置. #include <stdio.h> #include &l ...
- Java - 面向对象(object oriented)计划 详细解释
面向对象(object oriented)计划 详细解释 本文地址: http://blog.csdn.net/caroline_wendy/article/details/24058107 程序包括 ...
随机推荐
- SSH 登录警告:WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
1.使用Linux SSH登录其他Linux或者cisco交换机时有如下报错 WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! (远程主机标识已更改) ...
- Pytest(11)allure报告
前言 allure是一个report框架,支持java的Junit/testng等框架,当然也可以支持python的pytest框架,也可以集成到Jenkins上展示高大上的报告界面. mac环境: ...
- 解决 error MSB4057: 该项目中不存在目标“_CopyWebApplication” 问题
在使用MSBuild 编译项目的时候报错: 解决办法: 在Web项目中,使用Nuget添加引用 MSBuild.Microsoft.VisualStudio.Web.targets 即可.
- 2020牛客暑期多校训练营(第八场)Game SET
传送门:Game SET 题意 一套牌有四种属性,每种属性都有三种特征,shapes (one, two, or three), shape (diamond, squiggle, or oval), ...
- Codeforces Round #604 (Div. 2) A. Beautiful String(贪心)
题目链接:https://codeforces.com/contest/1265/problem/A 题意 给出一个由 a, b, c, ? 组成的字符串,将 ? 替换为 a, b, c 中的一个字母 ...
- Codeforces Round #547 (Div. 3) F1/2. Same Sum Blocks (Easy/Hard) (贪心,模拟)
题意:有一长度为\(n\)的数组,求最多的区间和相同的不相交的区间的个数. 题解:我们可以先求一个前缀和,然后第一层循环遍历区间的右端点,第二层循环枚举左端点,用前缀和来\(O(1)\)求出区间和,\ ...
- Light Bulb ZOJ - 3203 三分
三分: 和二分非常类似的一个算法,与二分不同的是 二分是单调的,而三分是一个先增后减或者先减后增 三分可以求出峰值. 注意三分一定是严格单调的,不能有相等的情况. 讲个例题: 题目 题意: 一个人发现 ...
- CF1475-C. Ball in Berland
CF1475-C. Ball in Berland 题意: 一个班级有\(a\)个男生和\(b\)个女生,现在这个班级有\(k\)对男女愿意一起出席毕业典礼,这里注意\(k\)对男女中可能会有某个男生 ...
- Postman查看上传文件过程时出现400 - Required MultipartFile parameter 'files' is not present错误
我在利用postman查看上传图片文件时,出现了如下图的错误,看到之后很懵逼. 图1 上网搜了一下,归结下来就是参数不一致导致的.不过还有一些是由于没加注解,如下图示: 图2 关于参数不一致问题,主要 ...
- 蓝桥杯——试题 算法训练 Sereja and Squares
Java 代码 ```` import java.util.Scanner; public class Main { private static long num = 0; private stat ...