MySql中的IF表达式

[TOC]

利用场景

  1. 一般为SQL盲注或时间注入在时候。
  2. 逗号,没有被过滤的情况下。

    如果注入点过滤了逗号,,可用CASE表达式绕过,参考SQL注入中的CASE表达式

MySql中的IF表达式

定义参考

  1. 官方参考:MYSQL IF表达式参考
  2. 语法

    1
    IF(expr1,expr2,expr3)
  3. 关于返回值
    3.1 如果expr1不等于0,且expr1不等于NULL,则整个表达式的结果为expr2,否则为expr3
    3.2 如果expr1expr2中只有一个为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="">