批改状态:合格
老师批语:mysqli 也有预处理操作的, 只是我们没有讲罢了, 因为pdo讲了预处理, 所以, mysqli想让大家了解另一套规则,再讲就重复了, 意义不大
// db_config.phpnamespace config;$config = [// 数据库主机'host' => $host ?? 'localhost',// 默认数据库'dbname' => $dbname ?? 'phpedu',// 默认字符编码'charset' => $charset ?? 'utf8',// 默认端口号'port' => $port ?? '3306',// 默认用户名'username' => $username ?? 'root',// 默认用户密码'password' => $password ?? 'root',];
// connect.phprequire_once('config/db_config.php');// 1. 使用exact()函数解构数组中的参数// 如果是vs storm编辑器,则需要写下面的注释, 否则用extract()会报错./*** @var string $host* @var string $username* @var string $password* @var string $dbname* 略...*/extract($config);// 2. 连接数据库$mysqli = new mysqli($host, $username, $password, $dbname, $port);// 3.判断是否连接成功(若连接失败, errorno会有值)if ($mysqli->connect_errno) {die($mysqli->connect_errno);}// 4. 设置客户端默认字符编码集$mysqli->set_charset($charset);// 5. 测试是否连接数据库成功dumpbr($mysqli);
创建库表
DROP DATABASE IF EXISTS `phpedu`;CREATE DATABASE `phpedu` /*!40100 DEFAULT CHARACTER SET utf8 */;USE `phpedu`;DROP TABLE IF EXISTS `user`;CREATE TABLE `user` (`id` int(10) unsigned NOT NULL AUTO_INCREMENT,`username` varchar(50) NOT NULL,`realname` varchar(50) NOT NULL DEFAULT '',`password` varchar(50) NOT NULL,`in_use` int(11) NOT NULL DEFAULT '1',`create_time` int(11) NOT NULL,`update_time` int(11) NOT NULL,PRIMARY KEY (`id`),UNIQUE KEY `username` (`username`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;
创建示例数据

require '../out.php';/* 打印用户信息 */function showUserInfo($user){$update_time = date('Y-m-d H:i:s', $user['update_time']);$create_time = date('Y-m-d H:i:s', $user['create_time']);$status = ($user['in_use'] == 1) ? '使用中' : '停用';echobr("ID: {$user['id']}, 用户名: {$user['username']}, 姓名: {$user['realname']}, 使用状态: {$status}, 创建时间: {$create_time}, 更新时间: {$update_time}");}// 1. 连接数据库require_once('connect.php');// 2. 执行CURD操作// 2.1 查询一条记录/* SQL语句 */$sql = "SELECT * FROM `user` WHERE `in_use` = 1";/* 执行查询, 并获取返回的结果集对象 */$mysqli_result = $mysqli->query($sql);/* fetch_array()方法: 一次输出一条记录, 并自动下移指针;参数:MYSQLI_ASSOC: 只获取关联部分数组元素.MYSQLI_BOTH: 默认参数, 同时获取关联部分和索引部分元素.MYSQLI_NUM: 值获取索引部分元素.*//* mysqli_fetch_assoc() 等效于 $mysqli_result->fetch_array(MYSQLI_ASSOC) *//* $mysqli_result->fetch_row() 等效于 $mysqli_result->fetch_array(MYSQLI_NUM) */$user = $mysqli_result->fetch_array(MYSQLI_ASSOC);showUserInfo($user);/* 若要输出下一条记录, 则再调用一次fetch_array()方法. *//* 结果集指针复位方法: $mysqli_result->data_seek(0); */echo '<hr>';// 2.2 查询多条记录/* SQL语句 */$sql = "SELECT * FROM `user` WHERE `in_use` = 1";/* 执行查询, 并获取返回的结果集对象 */$mysqli_result = $mysqli->query($sql);/* 判断返回结果集是否有记录 */if ($mysqli_result && $mysqli_result->num_rows > 0) {$users = $mysqli_result->fetch_all(MYSQLI_ASSOC);/* 循环输出结果记录 */foreach ($users as $user) {showUserInfo($user);}}/* result:ID: 1, 用户名: zhangsan, 姓名: 张三, 使用状态: 使用中, 创建时间: 2020-05-07 00:45:34, 更新时间: 2020-05-07 00:45:34ID: 2, 用户名: lisi, 姓名: 李四, 使用状态: 使用中, 创建时间: 2020-05-07 00:45:55, 更新时间: 2020-05-07 00:45:55ID: 5, 用户名: zhuqi, 姓名: 朱七, 使用状态: 使用中, 创建时间: 2020-05-07 00:47:07, 更新时间: 2020-05-07 00:47:07ID: 7, 用户名: bajie, 姓名: 八戒, 使用状态: 使用中, 创建时间: 2020-05-07 21:27:54, 更新时间: 2020-05-07 21:27:54*/echo '<hr>';// 2.3 新增一条记录$newUser = ['username' => 'chenjiu', 'password' => md5('123456'), 'realname' => '陈九', 'in_use' => 1, 'create_time' => time(), 'update_time' => time()];/* 给字符串字段加上引号 */array_walk($newUser, function (&$value, $key) {if (gettype($value) === 'string') {$value = "'$value'";}});/* 解构数组记录参数 */extract($newUser);/* 拼出SQL */$sql = "INSERT `user` SET `username` = {$username}, `password` = {$password}, `realname` = {$realname}, `in_use` = {$in_use}, `create_time` = {$create_time}, `update_time` = {$update_time}";/* 插入操作的返回值是插入结果(成功/失败) */if ($mysqli->query($sql)) {if ($mysqli->affected_rows > 0) {echobr('成功添加了' . $mysqli->affected_rows . '条记录, 新增记录主键: ' . $mysqli->insert_id);} else {echobr('没有添加新纪录');}} else {/* 实际项目中会把错误信息写到日志中 */echobr('插入失败:' . $mysqli->errno . '->' . $mysqli->error);}/* result: 成功添加了1条记录, 新增记录主键: 24 *//* 2.4 更新一条记录 */$id = $mysqli->insert_id;$update_time = time();$sql = "UPDATE `user` SET `in_use` = 0, `update_time` = {$update_time} WHERE `id` = {$id}";echobr($sql);/* 更新操作的返回值也是更新结果(成功/失败) */if ($mysqli->query($sql)) {if ($mysqli->affected_rows > 0) {echobr('成功更新了' . $mysqli->affected_rows . '条记录.');} else {echobr('没有更新任何数据');}} else {echobr('更新失败:' . $mysqli->erro . '->' . $mysqli->error);}/* result: 成功更新了1条记录. */// 2.5 删除一条记录/* $id变量值现在还是指向刚才插入的记录 */$sql = "DELETE FROM `user` WHERE `id` = {$id}";if ($mysqli->query($sql)) {if ($mysqli->affected_rows > 0) {echobr('成功删除了' . $mysqli->affected_rows . '条记录');}} else {echobr('删除失败:' . $mysqli->erro . '->' . $mysqli->error);}/* result: 成功删除了1条记录 */
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号