学习资料
http://php.net/manual/zh/book.mysqli.php
本文主要介绍 mysqli,所以资料是mysqli的手册地址。
准备工作
- 安装好你的mysql(xampp默认已经解决)
- 学会使用管理软件(phpmyadmin或navicat)
- 创建一个数据库
本文使用的数据库名
数据库:sodevel
1.连接数据库
想操作数据库,必须先与其创建连接关系。
mysql
比较古老的连接方式,虽然目前还能用,但原则上禁止使用。
PDO
使用抽象层连接,可兼容多种数据库,有用,但非本文主题。
mysqli
mysql的强化版本,本文主要讲解。
mysqli
必须开启mysqli扩展后才能使用,默认xampp已经帮你做好,该扩展提供了很多类,我们使用其中的两个 mysqli 和 mysqli_result。
连接语法
$db = new mysqli('localhost', 'root', '123456', 'sodevel');
$db 对象,所有后续操作都基于该对象。
mysqli 扩展内置的类,我们拿来就用,具体的属性和方法要看手册。
localhost 数据库的IP地址,这个代表本机
root 连接账号
123456 连接密码
sodevel 要连接的数据库名称
... 还有其他的可选参数,本文略过
判断连接成功与否
if( $db->connect_errno > 0 ){
echo "错误码:".$mysqli->connect_errno;
echo "提示语:".$mysqli->connect_error;
exit;
}
$db->connect_errno 错误代码,无错误的话 = 0
$mysqli->connect_error 错误信息,出错问题的文字说明
如果以上没有问题,那么你现在就可以进行数据操作了
2.执行数据库查询
与数据库做任何交互,都必须通过 SQL语句,本章先简单介绍几个例子。
基本语法
$is = $db->query("SQL语句");
$db 上一节连接数据库后得到的对象
query() 执行对象中的方法。
SQL语句,计划让数据库执行的命令语句
$is 在增删改的操作中,得到一个 布尔值,true 表示操作成功,false 表示操作失败。
乱码问题
如果插入中文数据会乱码,那么连接数据库之后,应该立刻执行这样一段语句。
//定义当前连接,使用UTF8编码,你也可以使用GBK等
$db->query("SET NAMES UTF8");
3.执行数据库语句(来源:https://www.sodevel.com/mysql)
- 增,向数据库写入数据
- 删,删除已有数据
- 改,修改数据
- 查,从数据库读取数据
准备工作
创建数据表:users
id(自增主键) | username | password |
---|---|---|
1 | 波比 | 123456 |
2 | 张三 | 123456 |
SQL 的基本概念
SQL 其实就是有格式的字符串,数据库来解析这个字符串,确认你的命令。
SQL语句的顺序很重要,不要随便调换!!
增
向数据库中写入数据
语句
insert into users (`username`,`password`) values ('name','passwd')
insert into
关键字,表示插入数据
users
目标数据表
(username,password)
目标字段
values
关键字
('name','passwd')
每个字段对应的值
在PHP中执行
$sql = "insert into users (`username`,`password`) values ('name','12345')";
$is = $db->query($sql);
if( $is == true ){
echo "插入成功";
}else{
echo "插入失败";
}
$db
是上文连接成功后得到的对象,还记得吗?
删
语法
delete from users WHERE id='3'
delete
关键字,表示删除数据
from users
目标数据表
WHERE
筛选目标数据,没有它就会删除所有数据
id='3'
只删除 ID= 3 的数据。
在PHP中执行
参考 写数据 的方法,就不重复介绍了。
改
update set users username='新值', password='新值' WHERE id=3
update
关键字,表示插入数据
set users
目标数据表
username='新值', password='新密码'
要修改的字段值
WHERE id=3
筛选目标数据
查
从数据库中取数据,比增删改要多一步。
基本语法
select * from users where id>1 order by id desc limit 0,2
select
关键字,表示要取数据
*
取出哪些字段的值?*号代表所有,也可以使用 id,username这样的格式
from users
目标数据表
这些都是可有可无的,但是顺序不能颠倒!!
where id>1
筛选目标数据,否则取出所有数据
order by id
根据ID进行排序,没有的话使用默认排序
desc
倒序,对应的是 asc 是正序。
limit 0,2
对结果数量进行限制,0,2表示只要前两条数据。
使用PHP获取数据
代码较多,涉及多个知识点,请注意!
$mysqli_result = $db->query("select * from users");
$rows = array();
while( $row = $mysqli_result->fetch_array( MYSQLI_ASSOC ) ){
$rows[] = $row;
}
var_dump( $rows );
$mysqli_result
如果 $db->query()
执行的是 SELECT的语句,就会返回系统类mysqli_result
的实例化对象。其他的是 true/false )
mysqli_result 手册地址:http://php.net/manual/zh/class.mysqli-result.php
$rows
定义数组,用于保存取出来的数据
while(){}
使用循环结构遍历数据。
$row = $mysqli_result->fetch_array()
每调用一次fetch_array,就会取出一条数据,直到所有数据都显示完毕,我们将它保存在 $row 变量。
MYSQLI_ASSOC
(可选)内置常量,表示需要一个关联数组地。
$rows[] = $row
将每次取出的数据,都保存在 $rows 这个二维数组里。
var_dump($rows)
看看你的数据,标准的二维数组,之后你可以用对付数组的任何方法来处理它。
WHERE 过滤
SQL的一部分,用于过滤数据,支持从简单到复杂的各种查询。
//给大家演示一些常见语法
WHERE id = 3
where id = 3 and name = '张三'
where id > 3 and name <> '张三' or password = '12345'
where ...
总结
连接流程的理解非常重要,尤其要注意的是:PHP 和 MYSQL 是两个独立的软件,必须通过某个扩展(mysqli)才能连接到一起进行处理。