mysql中:
cdh_customer 表
有个字段是这样的:customerType
bigint(20) DEFAULT NULL COMMENT '客户类型,1:月结;2:非月结 ',
select * from cdh_customer where customerType='000001fasdfasfsafs' ;
明明没有符合这个数据的条件为什么能查询出所有数据呢?
另一个表cc_asyn_request
字段:status
int(2) NOT NULL DEFAULT '0' COMMENT '状态 0.待处理1.已处理2.已导出',
SELECT * FROM cc_asyn_request
where status='12323123';
为什么就查询不出所有数据了呢?
同样都是整形字段结果为什么不一样,哪位大神能解释下?
第一个SQL是 customerType 等于'0000000001 or 1=1fasdfasfsafs'?
select * from cdh_customer where customerType='0000000001 or 1=1fasdfasfsafs' ;
你这段sql是不是拼写错了,应是:
select * from cdh_customer where customerType='0000000001’ or 1=1 ;
仔细看or 1=1,它表示true,而or 1=1和customerType='0000000001是不同的条件,只要满足一方,都可以查询出数据。
再看第二条sql:
SELECT * FROM cc_asyn_request where status='12323123';
这条sql没有or 1=1,只有一个条件,因此从数据库查询时也只是去找status='12323123'的数据。
第一条sql,个人猜测啊
select * from cdh_customer where customerType='0000000001 or 1=1fasdfasfsafs' ;
这里面可能会先运算,'0000000001 or 1=1fasdfasfsafs' 0000000001会默认成布尔,or 后面是个运算 得到false
前者为真 ,后者为假 ,用or连接取真的结果 ,
刚好你查出的数据 应该都是类型=1的数据
第二条的如果都行,那我们估计都要重新学习mysql了,
对于上面改题,思路好!