来源:自学PHP网 时间:2015-04-17 11:59 作者: 阅读:次
[导读] 通过这种方法我们只需要做8次select来确定一个键值的第一位或第n位下面将以查询mysql数据库当中user()的第一位为例:ps:第二位,第三位依次类推 select substr(user(),2,1) mysql select substr(user(),3...
通过这种方法我们只需要做8次select来确定一个键值的第一位或第n位
下面将以查询mysql数据库当中user()的第一位为例:
ps:第二位,第三位依次类推 select substr(user(),2,1) mysql> select substr(user(),3,1)
首先执行如下sql语句: www.2cto.com
mysql> select (ascii((substr(user(),1,1))) >> 7)=0;
我们将对这个8bit的ascii也就是user()的第一位做7次右偏移,也就是偏移到8bit的ascii的
第一位并与0做等运算,如果,运算结果为0 说明第一位不为0,也就为1
如果运算结果为1,说明第一位为0,不为1
+————————————–+
| (ascii((substr(user(),1,1))) >> 7)=0 |
+————————————–+
| 1 |
+————————————–+
1 row in set (0.00 sec)
这样我们就确定这个8bit的ascii的第一位为0
第二次我们来做6次右偏移来确定前两位
前两位可能是01或00,即依然可以与0做比较,
mysql> select (ascii((substr(user(),1,1))) >> 6)=0;
+————————————–+
| (ascii((substr(user(),1,1))) >> 6)=0 |
+————————————–+
| 0 |
+————————————–+
1 row in set (0.00 sec)
结果为0,即第二位为1
开始猜测前三位为010或011
让我们看看010和011的ascii码是多少
分别查询select b’011′ select b’010′
获得结果 010 = 2 011 = 3
执行如下sql:
mysql> select (ascii((substr(user(),1,1))) >> 5)=2;
+————————————–+
| (ascii((substr(user(),1,1))) >> 5)=2 |
+————————————–+
| 0 |
+————————————–+
即前三位不为010,而是011
直到获得最后一位
最终结果为:01110010
转换一下:
select b’01110010′
查询结果
+————-+
| b’01110010′ |
+————-+
| r |
+————-+
1 row in set (0.00 sec)
这样我们就获得了user()的第一位.其它位依此类推
|
自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习
京ICP备14009008号-1@版权所有www.zixuephp.com
网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com