MySql中的IF表达式
[TOC]
利用场景
- 一般为SQL盲注或时间注入在时候。
- 逗号
,
没有被过滤的情况下。如果注入点过滤了逗号
,
,可用CASE表达式绕过,参考SQL注入中的CASE表达式
MySql中的IF表达式
定义参考
官方参考:MYSQL IF表达式参考
语法
1
IF(expr1,expr2,expr3)
关于返回值
3.1 如果expr1
不等于0
,且expr1
不等于NULL
,则整个表达式的结果为expr2
,否则为expr3
。
3.2 如果expr1
,expr2
中只有一个为NULL
,则整个IF()
表达式的返回值类型为那个非NULL
表达式的类型。
3.3 默认的返回值遵守以下规则:1
2
3
4如果`expr2`或者`expr3`会产生一个`string`,则返回值为`string`;
如果`expr2`和`expr3`都是`string`,且任何其中一个是大小写敏感的,则返回值也是大小写敏感的;
如果`expr3`或者`expr3`产生一个浮点类型的值,则结果为一个浮点类型的值;
如果`expr2`或者`expr3`会产生一个整数,则结果为一个整数。
##举例
mysql> select if(1<0,sleep(5),sleep(2)); 0 1 +---------------------------+ | if(1<0,sleep(5),sleep(2)) row in set (2.00 sec) < pre>0,sleep(5),sleep(2));>