SQL注入中常用的函数
字符串相关函数
length(str)
获取字符串 str 的长度substr(str, index, length)
截取 str ,从 index 开始,截取长度为 lengthsubstring(str, index, length)
截取 str ,从 index 开始,截取长度为 lengthmid(str, index, length)
截取 str ,从 index 开始,截取长度为 lengthinsert(str, pos, length, newstr)
在原始字符串 str 中,将自左第 pos 位开始,长度为 length 的字符串替换成新的字符串 newstrsubstr(str, 1, length) <==> insert(str, length+1, 100, '')
其中的 100 可换为为大于等于 str 字符串长度的数字left(str, length)
截取 str ,从左边第一位开始,截取长度为 length
等价于:substr(str, 1, length)
right(str, length)
截取 str ,从右边第一位开始,截取长度为 length
等价于:substr(str, -1, length)
lpad(str, length, padstr)
、rpad(str, length, padstr)
在 str 的左(右)方填充 padstr ,直到字符串长度为 length;
如果 str 长度大于 length ,则将返回的字符串的长度缩减到 length 的长度lpad(str, length, 0) <==> substr(str, 1, length)
trim(A from B)
将字符串 B 中的 A 部分删去,返回剩余部分
例如:select trim('12' from '1234'); ==> '34'
Trick:from
前后的空格可以不要,即select trim('12'from'1234');
lower(str)/lcase(str)
、upper(str)/ucase(str)
将 str 转换成小/大写reverse(str)
将 str 倒序返回ascii(str)
、ord(str)
将单个字符转换成ascii码
注意:这两个函数都只能转换单个字符,如果传入字符串,则对字符串的第一个字符进行转换char(num)
将ascii码转换成字符
Trick: char 函数可以使用逗号,将多个ascii码同时转换成为字符串select char(97,98,99); ==> 'abc'
hex(str)
、unhex(str)
字符串16进制的相互转换bin(num)
、oct(num)
数字转2进制、8进制conv(N,A,B)
将数字 N 从 A 进制转换成 B 进制
Trick: 可以使用conv(i,10,36)
配合大小写转换函数生成任意字母select conv(10,10,36); ==> 'A'
select lower(conv(10,10,36)); ==> 'a'
binary value
/binary(value)
将 value 转换成二进制字符串
应用: 区分大小写select ('A'='a') ==> 1
select (binary 'A'='a') ==> 0
Trick: binary和’A’之间可以不要空格:select(binary'A'='a')
concat(str1, str2)
将 str1 和 str2 拼接group_concat(comumn1, column2)
将 column1 和 column2 两列数据进行拼接,不同行之间用逗号连接。strcmp(str1, str2)
将 str1 和 str2 进行比较
如果 str1 = str2,返回 0
如果 str1 < str2,返回 -1
如果 str1 > str2,返回 1find_in_set(str, list)
分析逗号分隔的 list 列表,如果发现 str ,返回 str 在 list 中的位置
应用:find_in_set(str1, str2)
判断 str1 和 str2 是否相等,如果相等,返回 1 ,否则返回 0 (str2中不能有逗号)field(value, val1, val2, val3, ...)
返回 value 在 val 中的位置
应用:field(str1, str2)
判断 str1 和 str2 是否相等,如果相等,返回 1 ,否则返回 0position(substr IN str)
返回子串 substr 在字符串 str 首次出现的位置,如果没有找到则返回 0locate(substr, str)
返回子串 substr 在字符串 str 首次出现的位置,如果没有找到则返回 0
此函数和 position 等价
数学相关函数
exp(num)
返回 e 的 num 次方x div y
返回 x 除以 y 的整数部分pow(x, y)/power(x, y)
返回 x 的 y 次方rand()
返回 0~1 之间的随机小数floor(num)
返回 num 的向下取整ceil(num)
返回 num 的向上取整greatest(a, b, c)
返回 a,b,c 中较大的那个greageest(A, B)=B <==> B≥A
least(a, b, c)
返回 a,b,c 中较小的那个least(A, B)=B <==> B≤A
系统信息函数
database()/schema()
获取当前数据库名user()
获取用户名version()
获取数据库版本load_file(path)
读取文件into outfile 'path'
写入文件
流程控制函数
CASE WHEN [test] THEN [result] ELSE [default] END
如果 test 为真,则返回 result 否则返回 defaultCASE [test] WHEN [val] THEN [result] ELSE [default] END
如果 test 和 val 相等,则返回 result ,否则返回 defaultif(test, a, b)
如果 test 是真,返回 a ,否则返回 bifnull(arg1, arg2)
如果 arg1 不是空,返回 arg1 ,否则返回 arg2nullif(arg1, arg2)
如果 arg1 和 arg2 相等,返回 null,否则返回 arg1
其他函数
sleep(num)
停止等待 num 秒钟benchmark(count, expr)
执行 expr 表达式 count 次
一些系统变量
@@datadir
数据库数据路径@@basedir
数据库安装路径变量@@version
数据库版本变量@@version_compile_os
操作系统变量version_compile_os