Abstract: MYSQL常用函数的讲解

一、常用函数

函数名 作用
version() 返回数据库的版本号
database() 返回当前数据库名
user() 返回当前用户
system_user() 返回当前用户
  • concat(s1, s2, …, sn)字符串s1,s2等多个字符串合并为一个字符串。
1
2
-- MY SQL FUNCTION
SELECT CONCAT("MY ", "SQL ", "FUNCTION ");
  • concat_ws(x, s1, s1, …, sn)把字符串合并成一个字符串,两两间以x连接。
1
2
-- I-LOVE-SQL
SELECT CONCAT_WS("-", "I", "LOVE", "SQL");
  • group_concat(s1, ‘ ‘, s2 )返回一个字符串结果,该结果由分组中的值连接组合而成。
1
SELECT GROUP_CONCAT(username, '-', passwd) FROM `USERS`;
  • left(s, n)返回字符串s前n个字符。
1
2
3
4
-- hello
SELECT LEFT('hello world', 5);
-- helllo w
SELECT LEFT('hello world', 7);
  • right(s, n)返回字符串s的后n个字符。
1
2
-- o world
SELECT RIGHT('hello world', 7);
  • substr/substring(s, start, length)
1
2
3
4
5
6
-- o 
SELECT SUBSTR('hello world', 5, 2);
SELECT SUBSTRING('hello world', 5, 2);
-- o wo
SELECT SUBSTR('hello world', 5, 4);
SELECT SUBSTRING('hello world', 5, 4);
  • mid(s, n, len)从字符串s的start位置截取长度为length的子字符串
1
2
-- o w
SELECT MID('hello world', 5, 3);
  • DISTINCT 过虑重复的记录
1
SELECT DISTINCT name FROM user;
  • UNION操作符用于合并两个或多个SELECT语句的结果集

NOTE: UNION内部的每个SELECT语句必须拥有相同数量的列,列也必须拥有相似的数据类型。UNION在进行表连接后会筛选掉重复的记录,UNION ALL只是简单的将两个结果合并后返回。

1
SELECT 字段名 FROM 表1 UNION SELECT 字段名 FROM 表2
  • ORDER BY在SQL注入中用于判断字段数,然后用UNION用于输出信息。

  • LIKE

操作符 左右
_ 代表任意单个字符
% 代表任意多字符
1
2
3
4
5
SELECT id FROM users WHERE 'username' LIKE 'b%';
SELECT id FROM users WHERE 'username' LIKE '%o%';
SELECT id FROM users WHERE 'username' LIKE 'admi_';
-- 把标题中含有1作者名含有1值含有1的数据列出
SELECT * FROM test.content WHERE title LIKE '%1%' or author like '%1%' or value like %1%''

like %q%包含q的 %q q在结尾 q% q在开头

二、读写文件

1. 写文件

1
2
3
4
5
-- 绝对路径
into dumpfile "filepath"
-- 绝对路径
into outfile "filepath"
select 123 into outfile/dumpfile '/var/www/html/eval.php';

2. 读文件

1
2
3
4
5
6
7
-- 绝对路径
load_file('filepath')
select load_file('/etc/passwd');
create table data(
data text
)
insert into data values(load_file(''));

load file: 读取文件并以字符串形式返回文件内容。

into outfile: 将所选行写入文件,该文件会在服务器主机上进行创建,所以你必须要有执行这条命令的权限,还要注意要写入文件不能是现有的文件。如:/etc/passwd

以下内容不太懂,先记住

文件转十六进制,然后unhexo into dumpfile

本地使用hex(load file(‘path’))处理二进制文件

服务器上,执行select unhex(0x十六进制内容) into dumpfile “/tmp/a.exe”