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

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

宿州市筋斗云信息科技-Vip
宿州市筋斗云信息科技-Vip原创
2019年11月22日 14:13:48924浏览

使用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) 等价



声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议