在进行SQL注入原理的剖析的时候,对MySQL数据库掌握薄弱,参照菜鸟教程的MySQL教程速刷一遍MySQL
关于MySQL
MySQL是最流行的关系型数据库管理系统,在WEB方面MySQL是最好的RDBMS应用软件之一。(RDBMS Relational Database Mangagement System:关系数据库管理软件)
什么是数据库、关键词等……
……(拒绝无意义的复制粘贴,传送门)
PHP脚本操作数据库用法
连接MySQL
使用mysqli_connect()函数来连接数据库;
mysqli_connect(host, username, password, dbname, port, socket)
参数
描述
host
可选。主机名或ip地址
username
可选。MySQL用户名
password
可选。MySQL密码
dbname
可选。使用的数据库
port
可选。尝试连接到MySQL服务器的端口号
socket
可选。规定socket或要使用的已命名的pipe
使用mysqli_close()函数可以断开与MySQL数据库的链接,但一般并不需要,因为已打开的非持久连接会在脚本执行完毕后自动关闭。
$dbhost = 'localhost'; // mysql服务器主机地址
$dbuser = 'root'; // mysql用户名
$dbpass = '123456'; // mysql用户名密码
$conn = mysqli_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
{
die('Could not connect: ' . mysqli_error());
}
echo '数据库连接成功!';
mysqli_close($conn);
?>
创建数据库
CREATE DATABASE 数据库名;
在PHP脚本中使用mysqli_query()函数来创建或删除数据库;
mysqli_query(connection, query, resultmode);
参数
描述
connection
必需。规定要使用的MySQL连接
query
必需。规定要查询的字符串
resultmode
可选。一个常量,可以为:MYSQLI_USE_RESULT(如果需要检索大量数据,使用这个)MYSQLI_STORE_RESULT(默认)
创建数据库实例:
$dbhost = 'localhost';
$dbuname = 'root';
$dbpasswd = 'root';
$conn = mysqli_connect($dbhost,$dbuname,$dbpasswd);
if(!$conn)
{
die('Could not connect :'.mysqli_error());
}
echo 'Successfully!!';
$sql = 'CREATE DATABASE RUNOOB';
$retval = mysqli_query($conn,$sql);
if(! $retval)
{
die('Failing to create databse!').mysqli_error($conn);
}
echo "
Successfully to create the database
";mysqli_close($conn);
?>
发现在数据库的名字是部分大小写的,一律小写,创建时的语句是大写,查看的时候发现数据库的名字都是小写。
删除数据库
在在MySQL的命令行下,使用drop命令
drop database
类同,在PHP脚本中,主要还是通过前面介绍过的mysqli_query()函数来执行一个SQL语句。
所以我们可以这样......
$dbhost = 'localhost';
$dbuname = 'root';
$dbpasswd = 'root';
$conn = mysqli_connect($dbhost,$dbuname,$dbpasswd);
if(!$conn)
{
die('Could not connect :'.mysqli_error());
}
echo 'Successfully!!';
$sql = 'DROP DATABASE RUNOOB';
$retval = mysqli_query($conn,$sql);
if(! $retval)
{
die('Failing to DROP databse!').mysqli_error($conn);
}
echo "
Successfully to DROP the database
";mysqli_close($conn);
?>
选择数据库
当我们有很多数据库需要管理的时候,面临复杂的业务时,来回切换数据库必不可少。
在命令行中,一条命令use 数据库名称便可以切换数据库,此时……我看到了一句话……
注意:所有的数据库名,表名,表字段都是区分大小写的。所以你在使用SQL命令时需要输入正确的名称。
哦??真的这么尴尬?我决定亲自试一试,首先我使用CREATE DATABASE RUNOOB成功创建了一个数据库,接着,我又使用语句CREATE DATABASE RuNOOB,结果创建失败,这间接证明了我前面数据库名不区分大小写的说法,但是黑体的说法真的错误码?其实不然,我查阅了一些资料后,得出如下结论:
MySQL在Linux下,数据库名、表名、列名、别名大小写规则是这样的:
数据库名、表名、表的别名、变量名 严格区分大小写
列名、列的别名在所有情况下均是忽略大小写
MySQL在Windows下都不区分大小写
当然,都不是一成不变的,在Linux下,消除大小写敏感通过修改配置文件/etc/my.cnf,添加lower_case_table_names = 1;Windows中,可以在MySQL配置文件中my.ini添加。参数0表示区分大小写,参数1表示不区分大小写。参考文章1
参考文章2
所以……我们到哪了?哦,选择数据库,继续;
PHP脚本使用函数mysqli_select_db()来选取一个数据库。函数成功执行后返回TRUE,否则返回FALSE;
mysqli_select_db(connection, dbname);
参数
描述
connection
必需。规定要使用的MySQL连接
dbname
必需。规定要使用的数据库
创建数据表
创建数据表需要的信息有:
表名
表字段名
定义每个表字段
语法:CREATE TABLE table_name (column_name column_type);
用PHP脚本创建数据表:
依旧mysqli_query()函数,执行成功返回TRUE,失败返回FALSE
,忘了吗?它是三个参数的哈,忘记的话向上翻一翻。
其中必选参数第二个query代表是我们的主要功能实现部分,SQL语句,若要全面介绍SQL语言就可以另外开启一篇了。
删除数据表
删除操作是很危险的,删除了数据库,库中的信息会全部丢失,同样,删除了数据表,表中的数据也会全部丢失。
语法:DROP TABLE table_name ;
在PHP脚本中,使用mysqli_query()函数
补充:
删除表内数据,用delete:
DELETE FROM 表名 WHERE 删除条件;
清除表内数据,保留表的结构,用truncate:
TRUNCATE TABLE 表名;
插入数据
语法:
INSERT INTO table_name (field1, field2, ... fieldN)
VALUES
(value1, value2, ... valueN);
如果数据是字符型,必须使用单引号或双引号,如"value"
从环境中拷出来我作为测试成功的代码:
$dbhost = 'localhost';
$dbuname = 'root';
$dbpasswd = 'root';
$conn = mysqli_connect($dbhost,$dbuname,$dbpasswd);
if(!$conn)
{
die('Could not connect :'.mysqli_error());
}
echo 'Successfully!!';
/*Above is about if successfully connecting to the database*/
mysqli_query($conn,"set names utf8");
$runoob_name = 'blackcat';
$runoob_id = 1;
$runoob_time = '2019-6-1';
$sql = "INSERT INTO runoob_tb1 (id,name,dates) VALUES ".
"('$runoob_id','$runoob_name','$runoob_time')";
mysqli_select_db($conn,'RUNOOB');
$retval = mysqli_query($conn,$sql);
if(! $retval)
{
die('
Failing to do').mysqli_error($conn);}
echo "
Successfully to do
";mysqli_close($conn);
?>
当然这是有前提的,在INSERT语句中,VALUES前的小括号中是字段名,也就是每一列的名字,VALUES后为我们插入的数据,这与它们的类型数量等是相对应的,只是这里埋个坑:VALUES句后面的三个变量名,为什么要用单引号括起来?
查询数据
语法:
SELECT column_name, column_name
FROM table_name
[WHERE Clause]
[ LIMIT N ] [ OFFSET M ]
查询语句可以使用一个或多个表,使用逗号(,)分隔;
SELECT命令可以读取一条或多条记录
可以使用通配符星号(*)来代替其他字段,
WHERE用来设定查询条件,可以包含任何条件
使用LIMIT 来设定返回的记录数
使用OFFSET指定SELECT语句开始查询的数据偏移量。默认情况下偏移量为0
查询数据成功后,使用PHP函数mysqli_fetch_array()配合第二个参数MYSQLI_ASSOC设置该参数查询结果返回关联数组,另一个函数mysqli_fetch_assoc()该函数从结果集中取得一行作为关联数组。返回根据从结果集取得的生成的关联数组,如果没有多行,返回false。
通俗地讲就是利用这个函数可以将查询的结果的一行返回为一个数组,索引为字段名,当函数mysqli_fetch_array()的第二个参数为MYSQLI_NUM时,返回数字数组,利用数字索引获取记录内容。