批改状态:合格
老师批语:有基础学这个应该很快的, pdo方法很多, 这里仅介绍了一些最常用的,以及常用的步骤, 更多可通过手册了解
配置项
$pdo = new PDO(dsn, username, password);需引入全局命名空间下的PDO类,且尽量在try...catch...中完成创建。?:开头的语义化名称,如::id.$stmt=$pdo->prepare($sql);.预处理对象可以理解为SQL对象。$stmt->execute($paramArray).如果SQL中的参数使用匿名占位符,则传参的数组使用索引数组;如果SQL中的参数使用命名占位符,则传参的数组使用关联数组,键名为占位符名称,冒号可省略。
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;
创建示例数据

配置文件
<?phpnamespace homework;return ['dbtype' => 'mysql','host' => 'localhost','dbname' => 'phpedu','port' => '3306','charset' => 'utf8','username' => 'root','password' => 'root',];
连接数据库(创建PDO对象)
namespace homework;use Exception;use PDO;require('../../out.php');$config = require('config/dbconfig.php');$dsn = "{$config['dbtype']}:host={$config['host']};dbname={$config['dbname']};charset={$config['charset']};port={$config['port']}";$username = $config['username'];$password = $config['password'];try {$pdo = new PDO($dsn, $username, $password);// dumpbr($pdo);} catch (Exception $e) {die($e->getMessage());}
数据库CURD操作
<?phpnamespace homework;use PDO;// 一、连接数据库require('connect.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. 查询单条记录/* SQL语句: 使用匿名占位符标识变量 */$sql = "SELECT * FROM `user` WHERE `id` > ?";/* 生成预处理对象 */$stmt = $pdo->prepare($sql);/* 为SQL语句中的变量传参, 并执行预处理对象中的SQL */$stmt->execute([3]);/* 处理SQL执行结果 *//* 获取查询结果的第一条数据 */$user1 = $stmt->fetch(PDO::FETCH_ASSOC);showUserInfo($user1);/* 获取查询结果的第二条数据 */$user2 = $stmt->fetch(PDO::FETCH_ASSOC);showUserInfo($user2);/* result:ID: 4, 用户名: zhaoliu, 姓名: 赵六, 使用状态: 停用, 创建时间: 2020-05-07 00:46:44, 更新时间: 2020-05-07 00:46:44ID: 5, 用户名: zhuqi, 姓名: 朱七, 使用状态: 使用中, 创建时间: 2020-05-07 00:47:07, 更新时间: 2020-05-07 00:47:07*/echo '<hr>';// 2. 查询多条记录/* SQL语句: 使用命名占位符标识变量 */$sql = "SELECT * FROM `user` WHERE `in_use` = :in_use";/* 生成预处理对象 */$stmt = $pdo->prepare($sql);/* 传参, 并执行SQL */$stmt->execute(['in_use' => 1]);/* 处理SQL执行结果 */$users = $stmt->fetchAll(PDO::FETCH_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:07*/echo '<hr>';// 3. 增加一条记录/* 待增加的记录 */$newUser = ['username' => 'chenjiu', 'realname' => '陈九', 'in_use' => 1, 'create_time' => time(), 'update_time' =>time()];/* SQL语句: */$sql = "INSERT `user` SET `username` = :username, `realname` = :realname, `in_use` = :in_use, `create_time` = :create_time, `update_time` = :update_time";/* 生成预处理对象 */$stmt = $pdo->prepare($sql);/* 传参,执行插入 */$stmt->execute($newUser);/* 处理SQL执行结果 */if($stmt->rowCount() > 0) {echobr('新增成功, 新增用户信息如下:');$newUser['id'] = $pdo->lastInsertId();showUserInfo($newUser);} else {echobr('创建失败');echobr($stmt->errorInfo());}/* result:新增成功, 新增用户信息如下:ID: 11, 用户名: chenjiu, 姓名: 陈九, 使用状态: 使用中, 创建时间: 2020-05-07 05:06:25, 更新时间: 2020-05-07 05:06:25*/// 4. 更新一条记录$userId = $_GET['id'] ?? $pdo->lastInsertId();/* SQL语句: */$sql = "UPDATE `user` SET `in_use` = ? WHERE `id` = ?";/* 生成预处理对象 */$stmt = $pdo->prepare($sql);/* 传参,执行修改 */$stmt->execute([0, $userId]);/* 处理SQL执行结果 */if($stmt->rowCount() > 0) {echobr('更新成功,更新后的用户信息如下:');$sql = 'SELECT * FROM `user` WHERE `id` = ?';$stmt = $pdo->prepare($sql);$stmt->execute([$userId]);$user = $stmt->fetch(PDO::FETCH_ASSOC);showUserInfo($user);} else {echobr('更新失败');echobr($stmt->errorInfo());}/* result:更新成功,更新后的用户信息如下:ID: 11, 用户名: chenjiu, 姓名: 陈九, 使用状态: 停用, 创建时间: 2020-05-07 05:06:25, 更新时间: 2020-05-07 05:06:25*/// 5. 删除记录$userId = $_GET['id'] ?? $userId;/* SQL语句: */$sql = "DELETE FROM `user` WHERE `id` = ?";/* 生成预处理对象 */$stmt = $pdo->prepare($sql);/* 传参,执行SQL */$stmt->execute([$userId]);/* 处理SQL执行结果 */if($stmt->rowCount() > 0) {echobr("ID为{$userId}的用户已被删除。");} else {echobr('删除失败');echobr($stmt->errorInfo());}/* result:ID为11的用户已被删除。*/// 三、关闭数据库unset($pdo);
以前学习过sqlserver数据库的使用,对SQL语句比较了解,所以这次课是PHP课程学习中相对比较简单的一次。PDO操作数据库很简便,同时它很好的体现了面向对象编程,所有的数据库操作都做了封装和隐藏,客户端使用工作类PDO类调用相应的方法即可。老师课堂上只讲了最简单的单表增删改查,多表联合查询,批量写入和事务操作,需要自己课后去看文档学习。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号