Blogger Information
Blog 25
fans 0
comment 0
visits 29668
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
使用PDO操作数据库|学习笔记-大型CMS开发实战第九期
宿州市筋斗云信息科技-Vip
Original
925 people have browsed it

使用PDO操作数据库|学习笔记-大型CMS开发实战第九期


=============================================

PHP 数据对象 (PDO) 扩展为PHP访问数据库定义了一个轻量级的一致接口。
PDO 提供了一个数据访问抽象层,这意味着,不管使用哪种数据库,都可以用相同的函数(方法)来查询和获取数据。
PDO随PHP5.1发行,在PHP5.0的PECL扩展中也可以使用,无法运行于之前的PHP版本。


PDO简介图


pdo连接数据库


pdo连接数据库

  1. # connect.php文件
  2. // 数据库连接参数
  3. $db = [
  4. 'type' => 'mysql',
  5. 'host' => 'localhost',
  6. 'dbname' => 'php',
  7. 'username' => 'root',
  8. 'password' => 'root',
  9. ];
  10. // 配置数据源DSN信息
  11. $dsn = "{$db['type']}:host={$db['host']};dbname={$db['dbname']}";
  12. // 连接数据库
  13. try {
  14. $pdo = new PDO($dsn, $db['username'], $db['password']);
  15. } catch (PDOException $e) {
  16. die('Connection Failed: ' . $e->getMessage());
  17. }

PDO预处理


PDOStatement: 预处理对象(SQL语句对象)
prepare(): 预处理方法, 用来生成预处理对象PDOStatement

  1. // 1. 连接数据库
  2. require __DIR__ . '/connect.php';
  3. // 2. 创建SQL语句模板
  4. $sql = 'INSERT INTO `system` SET `sys_id`= :sys_id, `title`=:title, `desc`=:desc, `key`=:key, `copy`=:copy';
  5. // 3. 创建SQL语句对象
  6. $stmt = $pdo->prepare($sql);

PDO参数绑定


  • bindParam(): 将参数绑定到SQL语句模板上
  • 常用的预定义常量:
    • PDO::PARAM_INT: 整数类型
    • PDO::PARAM_STR: 字符串类型
    • PDO::FETCH_ASSOC: 获取结果集中的关联部分
  1. // 1. 连接数据库
  2. require __DIR__ . '/connect.php';
  3. // 2. 创建SQL语句模板
  4. $sql = 'INSERT INTO `system` SET `sys_id`= :sys_id, `title`=:title, `desc`=:desc, `key`=:key, `copy`=:copy';
  5. // 3. 创建SQL语句对象
  6. $stmt = $pdo->prepare($sql);
  7. // 4. 将变量绑定到SQL语句模板的命名占位符上
  8. $sys_id = 1;
  9. $title = '少儿故事';
  10. $desc = '收集全网最新最全的影视资源';
  11. $key = '国产,欧美,日韩';
  12. $copy = '小学生';
  13. $stmt->bindParam('sys_id', $sys_id, PDO::PARAM_INT);
  14. $stmt->bindParam('title', $title, PDO::PARAM_STR);
  15. $stmt->bindParam('desc', $desc, PDO::PARAM_STR);
  16. $stmt->bindParam('key', $key, PDO::PARAM_STR);
  17. $stmt->bindParam('copy', $copy, PDO::PARAM_STR);

PDOStatement 类常用方法


  • execute(): 执行SQL语句(读/写)
  • rowCount(): 返回受影响的记录数量(不适合SELECT)
  • errorInfo(): 返回错误信息数组
  • fetch(): 获取结果集中的下一行
  • fetchAll(): 返回结果集中的所有行
  • fetchColumn(): 返回结果集下一行的单独的一列
  • bindColumn(): 将结果集某字段绑定到指定变量上
1.新增数据

  1. # 新增记录
  2. // 1. 连接数据库
  3. require __DIR__ . '/connect.php';
  4. // 2. 创建SQL语句模板
  5. $sql = 'INSERT INTO `system` SET `sys_id`= :sys_id, `title`=:title, `desc`=:desc, `key`=:key, `copy`=:copy';
  6. // 3. 创建SQL语句对象
  7. $stmt = $pdo->prepare($sql);
  8. // 4. 将变量绑定到SQL语句模板的命名占位符上
  9. $sys_id = 1;
  10. $title = '少儿动漫';
  11. $desc = '收集全网最新最全的影视资源';
  12. $key = '国产,欧美,日韩';
  13. $copy = '小学生';
  14. $stmt->bindParam('sys_id', $sys_id, PDO::PARAM_INT);
  15. $stmt->bindParam('title', $title, PDO::PARAM_STR);
  16. $stmt->bindParam('desc', $desc, PDO::PARAM_STR);
  17. $stmt->bindParam('key', $key, PDO::PARAM_STR);
  18. $stmt->bindParam('copy', $copy, PDO::PARAM_STR);
  19. // 5. 执行SQL操作
  20. if ($stmt->execute()) {
  21. if ($stmt->rowCount() > 0) {
  22. echo '成功添加' . $stmt->rowCount(). '条记录, 该记录的主键id是: ' . $pdo->lastInsertId();
  23. }
  24. } else {
  25. die('<pre>' . print_r($stmt->errorInfo(), true));
  26. }
  27. // 6. 销毁pdo, 关闭连接
  28. $pdo = null; // unset($pdo) 等价

2.更新数据

  1. # 更新记录
  2. // 1. 连接数据库
  3. require __DIR__ . '/connect.php';
  4. // 2. 创建SQL语句模板
  5. $sql = 'UPDATE `category` SET `name` = :name, `alias` = :alias WHERE `cate_id`=:cate_id';
  6. // 3. 创建SQL语句对象
  7. $stmt = $pdo->prepare($sql);
  8. // 4. 将变量绑定到SQL语句模板的命名占位符上
  9. $name = 'xjj';
  10. $alias = '小姐姐';
  11. $cate_id = 4;
  12. $stmt->bindParam('name', $name, PDO::PARAM_STR);
  13. $stmt->bindParam('alias', $alias, PDO::PARAM_STR);
  14. $stmt->bindParam('cate_id', $cate_id, PDO::PARAM_INT);
  15. // 5. 执行SQL操作
  16. if ($stmt->execute()) {
  17. if ($stmt->rowCount() > 0) {
  18. echo '成功更新了' . $stmt->rowCount() . '条记录';
  19. }
  20. } else {
  21. die('<pre>' . print_r($stmt->errorInfo(), true));
  22. }
  23. // 6. 销毁pdo, 关闭连接
  24. $pdo = null; // unset($pdo) 等价

3.删除数据
  1. # 删除记录
  2. // 1. 连接数据库
  3. require __DIR__ . '/connect.php';
  4. // 2. 创建SQL语句模板
  5. $sql = 'DELETE FROM `category` WHERE `cate_id`=:cate_id';
  6. // 3. 创建SQL语句对象
  7. $stmt = $pdo->prepare($sql);
  8. // 4. 将变量绑定到SQL语句模板的命名占位符上
  9. $cate_id = 4;
  10. $stmt->bindParam('cate_id', $cate_id, PDO::PARAM_INT);
  11. // 5. 执行SQL操作
  12. if ($stmt->execute()) {
  13. if ($stmt->rowCount() > 0) {
  14. echo '成功删除了' . $stmt->rowCount() . '条记录';
  15. }
  16. } else {
  17. die('<pre>' . print_r($stmt->errorInfo(), true));
  18. }
  19. // 6. 销毁pdo, 关闭连接
  20. $pdo = null; // unset($pdo) 等价

4.查询数据
  • 查询1: fetch() + while()
  1. # 查询1: fetch() + while()
  2. // 1. 连接数据库
  3. require __DIR__ . '/connect.php';
  4. // 2. 创建SQL语句模板
  5. $sql = 'SELECT * FROM `movies` WHERE `cate_id` = :cate_id';
  6. // 3. 创建SQL语句对象
  7. $stmt = $pdo->prepare($sql);
  8. // 4. 将变量绑定到SQL语句模板的命名占位符上
  9. $cate_id = 1;
  10. $stmt->bindParam('cate_id', $cate_id, PDO::PARAM_INT);
  11. // 5. 执行SQL操作
  12. $stmt->execute();
  13. // 遍历
  14. while ($movie = $stmt->fetch(PDO::FETCH_ASSOC)) {
  15. echo '<pre>' . print_r($movie, true);
  16. }
  17. // 6. 销毁pdo, 关闭连接
  18. $pdo = null; // unset($pdo) 等价

  • 查询2: fetchAll()
  1. # 查询2: fetchAll()
  2. // 1. 连接数据库
  3. require __DIR__ . '/connect.php';
  4. // 2. 创建SQL语句模板
  5. $sql = 'SELECT * FROM `movies` WHERE `cate_id` = :cate_id';
  6. // 3. 创建SQL语句对象
  7. $stmt = $pdo->prepare($sql);
  8. // 4. 将变量绑定到SQL语句模板的命名占位符上
  9. $cate_id = 3;
  10. $stmt->bindParam('cate_id', $cate_id, PDO::PARAM_INT);
  11. // 5. 执行SQL操作
  12. $stmt->execute();
  13. // 遍历, 返回二维数组
  14. $movies = $stmt->fetchAll(PDO::FETCH_ASSOC);
  15. foreach ($movies as $movie) {
  16. echo '<pre>' . print_r($movie, true);
  17. }
  18. // 6. 销毁pdo, 关闭连接
  19. $pdo = null; // unset($pdo) 等价
  • 查询3: bindColumn()
  1. # 查询3: bindColumn()
  2. // 1. 连接数据库
  3. require __DIR__ . '/connect.php';
  4. // 2. 创建SQL语句模板
  5. $sql = 'SELECT * FROM `movies` WHERE `cate_id` = :cate_id';
  6. // 3. 创建SQL语句对象
  7. $stmt = $pdo->prepare($sql);
  8. // 4. 将变量绑定到SQL语句模板的命名占位符上
  9. $cate_id = 3;
  10. $stmt->bindParam('cate_id', $cate_id, PDO::PARAM_INT);
  11. // 5. 执行SQL操作
  12. $stmt->execute();
  13. // 将结果集中的记录中的字段, 绑定到指定的变量上
  14. $stmt->bindColumn('name', $name);
  15. $stmt->bindColumn('detail', $detail);
  16. while ($stmt->fetch(PDO::FETCH_ASSOC)) {
  17. $detail = mb_substr($detail,0, 20,'utf-8');
  18. echo '片名: ' . $name . '<br>' . '简介: ' . $detail . '...<hr>';
  19. }
  20. // 6. 销毁pdo, 关闭连接
  21. $pdo = null; // unset($pdo) 等价



Correcting teacher:查无此人查无此人

Correction status:qualified

Teacher's comments:完成的不错,继续加油
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post