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

调用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.   `name` varchar(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数据库操作类

分享到: