PHP针对MySQL数据库提供的扩展,允许PHP当作MySQL的一个客户端连接MySQL服务端进行操作。

连库基本操作

开启扩展

在php.ini搜索php_mysqli.dll,如果没有搜索到新建一行写入extension=php_mysqli.dll,如果存在则删掉前面的’;’

访问phpinfo,搜索mysqli,能搜索到则说明mysqli扩展加载成功。

连接数据库

PHP提供了一个面向过程的连接函数:mysqli_connect(服务器地址,用户名,密码,数据库名,端口,socket),返回一个mysqli对象。

1
2
3
<?php
$like = mysqli_connect('localhost','root','root','mydb');
var_dump($like);

设置编码

mysql中不能识别’-‘,所以直接写utf8即可,不需要写utf-8。

1
2
3
4
5
6
7
8
9
10
//方式一:使用标准sql语句
$res = mysqli_query($like,'set names utf8');
var_dump($res); //bool(true)
//方式二:使用mysqli扩展函数
$res = mysqli_set_charset($like,'utf8');
var_dump($res); //bool(true)

//获取mysql编码
$res = mysqli_get_charset($like);
var_dump($res);

断开连接

1
2
$res = mysqli_close($like);
var_dump($res);

增删改

创建数据库:

1
2
3
4
5
6
7
8
9
CREATE DATABASE News;
use News;
CREATE TABLE IF NOT EXISTS `News`(
`id` INT UNSIGNED AUTO_INCREMENT,
`title` VARCHAR(100) NOT NULL,
`content` text NOT NULL,
`time` int,
PRIMARY KEY ( `id` )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

连接数据库:

1
2
3
4
5
6
<?php
$host = 'localhost';
$username = 'root';
$password = 'root';
$dbname = 'news';
$conn = mysqli_connect($host,$username,$password,$dbname);

增加数据

使用mysqli_query标准执行sql语句。

1
2
3
4
5
6
7
<?php
include 'mysqli.php';
$time = time();
$sql = "insert into news values(null,'震惊,某学生居然学这个','今天,我开始学PHP了',{$time})";
$res = mysqli_query($conn,$sql);
var_dump($res);
mysqli_close($conn);

修改数据

1
2
3
4
5
6
7
<?php
include 'mysqli.php';
$time = time();
$sql = "update news set content='太简单了,我两天就学会了' where id=1";
$res = mysqli_query($conn,$sql);
var_dump($res);
mysqli_close($conn);

删除数据

1
2
3
4
5
6
7
<?php
include 'mysqli.php';
$time = time();
$sql = "delete from news where id=1";
$res = mysqli_query($conn,$sql);
var_dump($res);
mysqli_close($conn);

查询数据

查询数据库在PHP开发中使用相当频繁,在数据库操作中占比90%以上,所以查询也较为复杂;查询返回结果集,SQL错误返回false;结果集转换为布尔类型永远为真。

执行查询

查询数据库和其他的sql执行一样,都是使用mysqli_query来执行sql语句。

1
2
3
4
5
6
<?php
include 'mysqli.php';
$sql = "select * from news";
$res = mysqli_query($conn,$sql);
var_dump($res);
mysqli_close($conn);

获取行数

查询数据库会返回查询结果,可能包含了一行或者多行数据,使用 mysqli_num_rows($res) 函数获取返回的结果有多少行。

1
2
3
4
5
6
7
<?php
include 'mysqli.php';
$sql = "select * from news";
$res = mysqli_query($conn,$sql);
$num = mysqli_num_rows($res); //获取结果集行数
var_dump($num);
mysqli_close($conn);

解析结果集

PHP不能直接使用结果集资源,必须将结果集转换成PHP能够解析的数据格式;通过从结果集中按照结果集指针所在位置取出对应的一条记录,返回一个数组,同时指针下移。当指针移除结果集外,返回NULL。

  1. mysqli_fetch_assoc() : 获取关联数组,列名作为数组下标,元素值作为数组元素
  2. mysqli_fetch_row() : 获取索引数组,只获取数据的值,不获取列名
  3. mysqli_fetch_array() : 获取关联或索引数组,默认同时存在,可以通过参数2来决定返回方式。
1
2
3
4
5
6
7
8
9
10
11
12
<?php
include 'mysqli.php';
$sql = "select * from news";
$res = mysqli_query($conn,$sql);
$row = mysqli_fetch_assoc($res);
echo '<pre>';
print_r($row);
$row = mysqli_fetch_row($res);
print_r($row);
$row = mysqli_fetch_array($res);
var_dump($row);
mysqli_close($conn);

遍历查询结果

使用while和foreach可以遍历全部返回值。

1
2
3
4
5
6
7
8
9
10
<?php
include 'mysqli.php';
$sql = "select * from news";
$res = mysqli_query($conn,$sql);
while ($row = mysqli_fetch_assoc($res)){
foreach($row as $key => $value){
echo $key . " : " . $value . '<br>';
}
echo '<br>';
}