sqlwhere1=1的详细解释

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

sqlwhere1=1的详细解释
原⽂来⾃:https:///zc474235918/article/details/50544484
看⼀下这两个句⼦:
select * from user
select * from user where1=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 where1=1;
有条件的时候:
select * from User where1=1 and id='XX' ……;
这样写的代码,会⽐分情况判断的代码更规范。

对于以上的写法,并不是唯⼀的。

也可以使 where ‘a’=’a’ 、’a’<>’b’等。

相关文档
最新文档