当前位置:首页 > PHP教程 > php类库 > 列表

php实现pdo数据库操作类过程详解

发布: 来源: PHP粉丝网  添加日期:2023-06-23 16:24:39 浏览: 评论:0 

这篇文章主要介绍了php实现pdo数据库操作类过程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧。

数据库操作类的优点

优点可以说是非常多了,常见的优点就是便于维护、复用、高效、安全、易扩展。例如PDO支持的数据库类型是非常多的,与mysqli不同的就是,PDO还支持其他数据库,一套写法多种数据库的匹配,而mysqli仅仅是支持mysql。

代码Db.php

  1. /** 
  2.  * 数据库的基本操作 
  3.  */ 
  4. class Db 
  5.     // 数据库的默认连接参数 
  6.     private $dbConfig=[ 
  7.         'db'=>'mysql'// 数据库类型 
  8.         'host'=>'localhost'// 主机名称 
  9.         'port'=>'3306'// 默认端口 
  10.         'user'=>'root'// 用户名 
  11.         'pass'=>'root'// 密码 
  12.         'charset'=>'utf8'// 默认字符集 
  13.         'dbname'=>'edu'// 默认数据库 
  14.     ]; 
  15.     // 新增主键id 
  16.     public $insertId = null; 
  17.     // 受影响的记录 
  18.     public $num = 0; 
  19.     // 单例模式,本类的实例 
  20.     private static $instance = null; 
  21.     // 数据库的连接 
  22.     private $conn = null; 
  23.     /** 
  24.      * Db构造方法 
  25.      * 私有化以防止外部实例化 
  26.      */ 
  27.     private function __construct($params=[]) 
  28.     { 
  29.         // 初始化连接参数 
  30.         $this->dbConfig = array_merge($this->dbConfig,$params); 
  31.         // 连接数据库 
  32.         $this->connect(); 
  33.     } 
  34.     /** 
  35.      * 禁止外部克隆该实例 
  36.      */ 
  37.     private function __clone() 
  38.     { 
  39.         // TODO:Implement __clone() method. 
  40.     } 
  41.     /** 
  42.      * 获取当前类的单一实例 
  43.      */ 
  44.     public static function getInstance($params=[]) 
  45.     { 
  46.         if (!self::$instance instanceof self) { 
  47.             self::$instance = new self($params); 
  48.         } 
  49.         return self::$instance
  50.     } 
  51.     private function connect() 
  52.     { 
  53.         try{ 
  54.             // 配置数据源DSN 
  55.             $dsn = "{$this->dbConfig['db']}:host={$this->dbConfig['host']};port={$this->dbConfig['port']};dbname={$this->dbConfig['dbname']};charset={$this->dbConfig['charset']}"
  56.             // 创建PDO对象 
  57.             $this->conn = new PDO($dsn,$this->dbConfig['user'],$this->dbConfig['pass']); 
  58.             // 设置客户端字符集 
  59.             $this->conn->query("SET NAMES {$this->dbConfig['charset']}"); 
  60.         }catch (PDOException $e){ 
  61.             die('数据库连接失败'.$e->getMessage()); 
  62.         } 
  63.     } 
  64.     /**  
  65.      * 完成数据表的操作:CURD 
  66.      */ 
  67.     public function exec($sql
  68.     { 
  69.         $num = $this->conn->exec($sql); 
  70.         // 如果有受影响的记录 
  71.         if($num > 0){ 
  72.             // 如果是新增操作,初始化新增主键id属性 
  73.             if(null !==$this->conn->lastInsertId()){ 
  74.                 $this->insertId = $this->conn->lastInsertId(); 
  75.             } 
  76.             $this->num = $num// 返回受影响的记录 
  77.         }else
  78.             $error = $this->conn->errorInfo(); // 获取最后操作错误信息的数组 
  79.             var_dump($error); 
  80.         } 
  81.     } 
  82.     // 获取单条查询结果 
  83.     public function fetch($sql
  84.     { 
  85.         return $this->conn->query($sql)->fetch(PDO::FETCH_ASSOC); 
  86.     } 
  87.     // 获取多条查询结果 
  88.     public function fetchAll($sql
  89.     { 
  90.         return $this->conn->query($sql)->fetchAll(PDO::FETCH_ASSOC); 
  91.     } 
  92. ?> 

调用Demo.php

  1. /** 
  2.  * Db类测试 
  3.  */ 
  4. require 'Db.php'
  5. // 获取Db类实例 
  6. $db = Db::getInstance(); 
  7. // 新增操作 
  8. // $sql = "INSERT student SET name='张一鸣',email='ByteDance@qq.com',grade='59',course='golang'"; 
  9. // $db->exec($sql); 
  10. // echo '成功插入了'.$db->num.'条记录,主键id是'.$db->insertId; 
  11. // 删除操作 
  12. // $sql = "DELETE FROM student WHERE id='4'"; 
  13. // $db->exec($sql); 
  14. // echo '成功删除了'.$db->num.'条记录'; 
  15. // 更新操作 
  16. // $sql = "UPDATE student SET grade='1199' WHERE id='1'"; 
  17. // $db->exec($sql); 
  18. // echo '成功更新了'.$db->num.'条记录'; 
  19. // 查询单条操作 
  20. // $sql = "SELECT id,name,email,grade FROM student WHERE grade < '60'"; 
  21. // $row = $db->fetch($sql); 
  22. // var_dump($row); 
  23. // // 查询多条操作 
  24. // $sql = "SELECT id,name,email,grade FROM student WHERE grade > '80'"; 
  25. // $rows = $db->fetchAll($sql); 
  26. // var_dump($rows); 
  27. ?> 

数据库表格结构

php实现pdo数据库操作类过程详解

全选下面的SQL语句粘贴至数据库管理工具的SQL执行框进行执行即可快速创建测试数据库。

  1. -- phpMyAdmin SQL Dump 
  2. -- version 4.8.5 
  3. -- https://www.phpmyadmin.net/ 
  4. -- 
  5. -- 主机: localhost 
  6. -- 生成日期: 2022-08-08 10:46:35 
  7. -- 服务器版本: 5.7.26 
  8. -- PHP 版本: 7.3.4 
  9. SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"
  10. SET AUTOCOMMIT = 0; 
  11. START TRANSACTION
  12. SET time_zone = "+00:00"
  13. /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; 
  14. /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; 
  15. /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; 
  16. /*!40101 SET NAMES utf8mb4 */; 
  17. -- 
  18. -- 数据库: `edu` 
  19. -- 
  20. -- -------------------------------------------------------- 
  21. -- 
  22. -- 表的结构 `student` 
  23. -- 
  24. CREATE TABLE `student` ( 
  25.   `id` int(11) NOT NULL
  26.   `namevarchar(32) COLLATE utf8_unicode_ci NOT NULL
  27.   `email` text COLLATE utf8_unicode_ci NOT NULL
  28.   `grade` varchar(32) COLLATE utf8_unicode_ci NOT NULL
  29.   `course` varchar(32) COLLATE utf8_unicode_ci NOT NULL 
  30. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; 
  31. -- 
  32. -- 转存表中的数据 `student` 
  33. -- 
  34. INSERT INTO `student` (`id`, `name`, `email`, `grade`, `course`) VALUES 
  35. (1, '王兴''meituan@qq.com''80''ruby'), 
  36. (2, '黄峥''pdd@qq.com''68''mysql'), 
  37. (6, '李彦宏''baidu@qq.com''95''python'), 
  38. (5, '马云''mayun@qq.com''88''php'), 
  39. (7, '刘强东''jd@qq.com''76''C++'), 
  40. (8, '马化腾''10001@qq.com''59''java'), 
  41. (9, '张一鸣''ByteDance@qq.com''77''golang'); 
  42. -- 
  43. -- 转储表的索引 
  44. -- 
  45. -- 
  46. -- 表的索引 `student` 
  47. -- 
  48. ALTER TABLE `student` 
  49.   ADD PRIMARY KEY (`id`); 
  50. -- 
  51. -- 在导出的表使用AUTO_INCREMENT 
  52. -- 
  53. -- 
  54. -- 使用表AUTO_INCREMENT `student` 
  55. -- 
  56. ALTER TABLE `student` 
  57.   MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=10; 
  58. COMMIT
  59. /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; 
  60. /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; 
  61. /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

Tags: php数据库操作类 pdo数据库操作类

分享到: