上次课程学习了PDO,可以操作所有数据库,今天学习Mysqli,只用于操作Mysql数据库,在很多场合中还是有用到。
示例演示
database.php
<?php
namespace mysqli_edu;
// 数据库连接配置参数
return [
// 数据库的类型
'type' => $type ?? 'mysql',
// 数据库默认主机
'host' => $host?? 'localhost',
// 默认数据库
'dbname'=> $dbname ?? 'phpedu',
// 默认字符编码集
'charset'=> $charset ?? 'utf8',
// 默认端口号
'port'=> $port ?? '3306',
// 默认的用户名
'username'=> $username ?? 'admin',
// 默认的用户密码
'password'=> $password ?? 'admin123',
];
connect.php
<?php
namespace mysqli_edu;
use mysqli;
// 1. 加载外部的数据库连接参数
$config = require __DIR__ . '/config/database.php';
// 2. mysqli 连接四大参数
// 2.1 数据库的主机名: host
// 2.1 用户名: username
// 2.3 用户密码: password
// 2.4 默认的数据库 :dbname
// $host = $config['host'];
// $dbname = $config['dbname'];
// $username = $config['username'];
// $password = $config['password'];
/**
* @var string $host
* @var string $username
* @var string $password
* @var string $dbanme
* @var string $charset
*/
extract($config);
// 将关联数组中的键值对, 转为变量的名值对
// 2. 连接数据库
$mysqli = new mysqli($host, $username, $password, $dbname);
// 3. 判断是否连接成功?
if ($mysqli->connect_errno) echo $mysqli->connect_error;
// 4. 设置客户端默认的字符编码集
$mysqli->set_charset($charset);
//var_dump($mysqli);
select1.php
select2.php
<?php
// 查询1: 单条记录
// 1. 连接数据库
require 'connect.php';
// 2. 操作数据库
$sql = "SELECT `id`, `name` FROM `goods` WHERE `price` >80";
// 查询使用:$mysqli->query($sql),
// 返回值
// 1. 如果是查询: 返回一个:结果集对象
// 2. 如果是写操作: 新增, 更新, 删除, 执行成功返回布尔值
// true:成功, false : 失败, 然后通过 affected_rows属性返回受影响的记录数量
$mysqli_result = $mysqli->query($sql);
//var_dump($mysqli_result);
// fetch_array():一次输出一条记录,并自动下移指针
// $staff = $mysqli_result->fetch_array(MYSQLI_BOTH);
// printf('<pre>%s</pre>', print_r($staff, true));
// $staff = $mysqli_result->fetch_array(MYSQLI_ASSOC);
// printf('<pre>%s</pre>', print_r($staff, true));
// $staff = $mysqli_result->fetch_array(MYSQLI_NUM);
// printf('<pre>%s</pre>', print_r($staff, true));
// 只返回关联部分: $mysqli_result->fetch_array(MYSQLI_ASSOC);语法糖
// $staff = $mysqli_result->fetch_assoc();
// printf('<pre>%s</pre>', print_r($staff, true));
// 只返回索引部分: $mysqli_result->fetch_array(MYSQLI_NUM);语法糖
// $staff = $mysqli_result->fetch_row();
// printf('<pre>%s</pre>', print_r($staff, true));
// 指针复位
//$mysqli_result->data_seek(0);
if ($mysqli_result && $mysqli_result->num_rows > 0 ) {
while ($staff = $mysqli_result->fetch_assoc()) {
printf('<pre>%s</pre>', print_r($staff, true));
}
} else {
echo '查询失败或没有查询到满足条件的商品';
}
// 3. 关闭连接
// 释放结果集
//$mysqli_result->free_result();
$mysqli->close();
------------------------------------
// 查询2: 多条记录
// 1. 连接数据库
require 'connect.php';
// 2. 操作数据库
$sql = "SELECT `id`, `name` ,`price` FROM `goods` WHERE `price` >50";
$mysqli_result = $mysqli->query($sql);
if ($mysqli_result && $mysqli_result->num_rows > 0 ) {
$goods = $mysqli_result->fetch_all();
foreach ($goods as $good) {
// vprintf() 与 printf()功能一样, 区别 就是参数是数组
vprintf('<li>编号: %s , 商品名称: %s , 价格: %s </li>', $good);
//vprintf('<li>编号: %s , 商品名称: %s </li>', $good);
// printf('<pre>%s</pre>', print_r($good, true));
}
} else {
echo '查询失败或没有查询到满足条件的商品';
}
// 3. 关闭连接
// 释放结果集
//$mysqli_result->free_result();
$mysqli->close();
insert.php
<?php
// 新增操作
// 1. 连接数据库
require 'connect.php';
// 2. 操作数据库
// 前端表单->json格式的字符串, php将这种json字符串转为数组/对象
$arr = ['15', '帽子2', '30', '55'];
array_walk($arr, function(&$item, $key, $length) {
if ($key < $length-1 ) $item = "'$item'";
}, count($arr));
$data = implode(', ', $arr);
$sql = "INSERT `goods` (`id`,`name`,`price`,`number`) VALUES ($data)";
if ($mysqli->query($sql)) {
if ($mysqli->affected_rows > 0) {
echo '成功添加了 ' . $mysqli->affected_rows . ' 条记录, 新增记录主键ID: ' . $mysqli->insert_id;
} else {
echo '没有添加新记录';
}
} else {
die('添加失败'. $mysqli->errno . ' : ' . $mysqli->error);
}
// 3. 关闭连接
// 释放结果集
$mysqli->close();
update.php
<?php
// 更新操作
// 1. 连接数据库
require 'connect.php';
// 2. 操作数据库
// 前端表单->json格式的字符串, php将这种json字符串转为数组/对象
$arr = ['name'=>'裤子', 'price'=>'200'];
array_walk($arr, function(&$item, $key) {
$item = "`$key` = '$item'";
});
$data = implode(', ', $arr);
$sql = "UPDATE `goods` SET " . $data . " WHERE `id` = 2";
if ($mysqli->query($sql)) {
if ($mysqli->affected_rows > 0) {
echo '成功更新了 ' . $mysqli->affected_rows . ' 条记录';
} else {
echo '没有更新任何记录';
}
} else {
die('更新失败'. $mysqli->errno . ' : ' . $mysqli->error);
}
// 3. 关闭连接
// 释放结果集
$mysqli->close();
delete.php
<?php
// 删除操作
// 1. 连接数据库
require 'connect.php';
// 2. 操作数据库
$sql = "DELETE FROM `goods` WHERE `id` =" . $_GET['id'];
if ($mysqli->query($sql)) {
if ($mysqli->affected_rows > 0) {
echo '成功删除了 id=' .$_GET['id'] . ' 的记录';
} else {
echo '没有删除任何记录';
}
} else {
die('删除失败'. $mysqli->errno . ' : ' . $mysqli->error);
}
// 3. 关闭连接
$mysqli->close();
课程学习小结
在老师的直播讲解之后,由通过回看视频进行理解消化,MySQLi在实际项目中还是有一定的用途,值得花一定时间了解。
在修改代码调试的时候,遇到不少问题,如数据无法读取显示等,通过在学习群里提问寻求帮助以及自己重新检查代码的发现细微差别之处等方式予以解决,可见,学习需要理解+熟练,同时编程语言的规范必须严格遵守,稍有差异吗,哪怕是一个小小标点符号的错误,都会影响整个程序的顺利运行,这次的实践中这一点又加深了体会,很有裨益。通过这两次的学习,终于实现了从数据库中获取数据并呈现在页面上,有种全身经络打通的感觉。