sql where 1=1 规范代码
在讲解这个问题的时候,首先来看一个例子。
看一下这两个句子:
1 | select * from user |
这两个 句子执行结果是一样一样的。而sql注入就是利用了这个原理 来进行破坏。比如:
1 | select * from user where id='1000' |
如果允许用户输入的话,那么这个句子就成了:
1 | select * from user where id='XXX' or 1=1 |
这样的话,这个句子就是恒成立的了。
上述1=1 的使用,会影响预先指定的查询结果,使得本来要查询的数据 失效。
where 1=1 这种写法 虽然给程序开发人员带来不便,还要避免sql注入的问题。
但 “1=1” 这种写法 也会给程序编写增加了方便。
1=1 可以很方便的规范语句
对于组合查询的来说,因为查询比较模糊,而查询的where条件的个数也不确定。
一般这样的sql语句进行查询的时候:
1 | sql.append("select * from User"); |
对于上述这种写法,逻辑上感觉没有问题。但是如果whereUser里面的id为空。那么最后拼接出来得到的语句会成:
1 | select * from User and Name='XXX' and Phone='XXX' |
这条语句 没有where关键字,肯定会报错的。但是如果说,既然条件个数未知,那么把where关键字放到 if外面去
1 | sql.append("select * from User"); |
这样写的话,如果三个条件都为空。则这是一条不带查询条件的查询。那么最后这条语句会被解析成:
1 | select * from User where; |
这条语句,空有where关键字 没有条件,照样会报错的。
对于解决上述这种未知的问题,只能进行各种情况的判断进行拼接。当然可以用“where 1=1”进行代码的规范:
1 | sql.append("select * from User where 1=1 "); |
对于上述的这种写法,无论是否有条件 都是可以成立的。
无条件的的时候:
1 | select * from User where 1=1; |
有条件的时候:
1 | select * from User where 1=1 and id='XX' ……; |
这样写的代码,会比 分情况判断的代码 更规范。对于以上的写法,并不是唯一的。也可以使 where ‘a’=’a’ 、’a’<>’b’等。
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/zc474235918/article/details/50544484
————————————————
版权声明:本文为CSDN博主「赵崇」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zc474235918/article/details/50544484
- Post title:SQL where 1 = 1 用法
- Post author:Yuxuan Wu
- Create time:2021-03-23 22:30:20
- Post link:yuxuanwu17.github.io2021/03/23/2021-03-24-SQL-where-1-=-1-用法/
- Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.