Error-based

1.将聚合函数count()和group by语句联合起来迫使sql查询语句返回错误(主键重复)

  须知:

    floor:函数只返回整数部分,小数部分舍弃。

    round:函数四舍五入,大于0.5的部分进位,不到则舍弃。

    floor(rand(0)*2)前面产生的随机数是确定的011011...

    1>mysql在遇到select count(*) from tables group by x;这语句的时候会建立一个虚拟表

 

        (其中key是主键,不可重复)

    2>取第一条数据,执行floor(rand(0)*2),发现结果为0(第一次计算),查询虚拟表,发现0的键值不存在,则floor(rand(0)*2)会被再计算一次,结果为1(第二次计算),插入虚表,第二次计算是计算键值(主键)

       查询第二条记录,再次计算floor(rand(0)*2),发现结果为1(第三次计算),查询虚表,发现1的键值存在,所以floor(rand(0)*2)不会被计算第二次,直接count(*)加1

       查询第三条记录,再次计算floor(rand(0)*2),发现结果为0(第4次计算),查询虚表,发现键值没有0,进行第二次键值得计算,结果为1,因为主键不可重复,所以报错([Err] 1062 - Duplicate entry '1' for key 'group_key'),所以至少要三条数据才可以,确定出错

    a>floor(rand()*2)产生的随机数不确定,所以可能只需要两条记录就出错了,如下

  注意:如果是select count(*),floor(rand(0)*2) from user group by 2;可以看成select count(*) from user group by floor(rand(0)*2)

2.列名重复

  放在第一个select后面,每个列名后面会+1

  select * from (select NAME_CONST(version(),1),NAME_CONST 

(version(),1))x
  join:连接函数
  select * from(select * from `table` a join `table` b)c

 3.xpath语法错误

  正常语法:select extractvalue(1,'/a/b');
  报错语法:
  select updatexml(1,concat(0x7e,(select @@version),0x7e),1)
  select extractvalue(1,concat(0x7e,(select @@version),0x7e))

    

 

转载于:https://www.cnblogs.com/xiaolangjun/p/7163778.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值