php实现pdo数据库操作类过程详解
发布: 来源: PHP粉丝网 添加日期:2023-06-23 16:24:39 浏览: 评论:0
这篇文章主要介绍了php实现pdo数据库操作类过程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧。
数据库操作类的优点
优点可以说是非常多了,常见的优点就是便于维护、复用、高效、安全、易扩展。例如PDO支持的数据库类型是非常多的,与mysqli不同的就是,PDO还支持其他数据库,一套写法多种数据库的匹配,而mysqli仅仅是支持mysql。
代码Db.php
- /**
- * 数据库的基本操作
- */
- class Db
- {
- // 数据库的默认连接参数
- private $dbConfig=[
- 'db'=>'mysql', // 数据库类型
- 'host'=>'localhost', // 主机名称
- 'port'=>'3306', // 默认端口
- 'user'=>'root', // 用户名
- 'pass'=>'root', // 密码
- 'charset'=>'utf8', // 默认字符集
- 'dbname'=>'edu', // 默认数据库
- ];
- // 新增主键id
- public $insertId = null;
- // 受影响的记录
- public $num = 0;
- // 单例模式,本类的实例
- private static $instance = null;
- // 数据库的连接
- private $conn = null;
- /**
- * Db构造方法
- * 私有化以防止外部实例化
- */
- private function __construct($params=[])
- {
- // 初始化连接参数
- $this->dbConfig = array_merge($this->dbConfig,$params);
- // 连接数据库
- $this->connect();
- }
- /**
- * 禁止外部克隆该实例
- */
- private function __clone()
- {
- // TODO:Implement __clone() method.
- }
- /**
- * 获取当前类的单一实例
- */
- public static function getInstance($params=[])
- {
- if (!self::$instance instanceof self) {
- self::$instance = new self($params);
- }
- return self::$instance;
- }
- private function connect()
- {
- try{
- // 配置数据源DSN
- $dsn = "{$this->dbConfig['db']}:host={$this->dbConfig['host']};port={$this->dbConfig['port']};dbname={$this->dbConfig['dbname']};charset={$this->dbConfig['charset']}";
- // 创建PDO对象
- $this->conn = new PDO($dsn,$this->dbConfig['user'],$this->dbConfig['pass']);
- // 设置客户端字符集
- $this->conn->query("SET NAMES {$this->dbConfig['charset']}");
- }catch (PDOException $e){
- die('数据库连接失败'.$e->getMessage());
- }
- }
- /**
- * 完成数据表的操作:CURD
- */
- public function exec($sql)
- {
- $num = $this->conn->exec($sql);
- // 如果有受影响的记录
- if($num > 0){
- // 如果是新增操作,初始化新增主键id属性
- if(null !==$this->conn->lastInsertId()){
- $this->insertId = $this->conn->lastInsertId();
- }
- $this->num = $num; // 返回受影响的记录
- }else{
- $error = $this->conn->errorInfo(); // 获取最后操作错误信息的数组
- var_dump($error);
- }
- }
- // 获取单条查询结果
- public function fetch($sql)
- {
- return $this->conn->query($sql)->fetch(PDO::FETCH_ASSOC);
- }
- // 获取多条查询结果
- public function fetchAll($sql)
- {
- return $this->conn->query($sql)->fetchAll(PDO::FETCH_ASSOC);
- }
- }
- ?>
调用Demo.php
- /**
- * Db类测试
- */
- require 'Db.php';
- // 获取Db类实例
- $db = Db::getInstance();
- // 新增操作
- // $sql = "INSERT student SET name='张一鸣',email='ByteDance@qq.com',grade='59',course='golang'";
- // $db->exec($sql);
- // echo '成功插入了'.$db->num.'条记录,主键id是'.$db->insertId;
- // 删除操作
- // $sql = "DELETE FROM student WHERE id='4'";
- // $db->exec($sql);
- // echo '成功删除了'.$db->num.'条记录';
- // 更新操作
- // $sql = "UPDATE student SET grade='1199' WHERE id='1'";
- // $db->exec($sql);
- // echo '成功更新了'.$db->num.'条记录';
- // 查询单条操作
- // $sql = "SELECT id,name,email,grade FROM student WHERE grade < '60'";
- // $row = $db->fetch($sql);
- // var_dump($row);
- // // 查询多条操作
- // $sql = "SELECT id,name,email,grade FROM student WHERE grade > '80'";
- // $rows = $db->fetchAll($sql);
- // var_dump($rows);
- ?>
数据库表格结构
全选下面的SQL语句粘贴至数据库管理工具的SQL执行框进行执行即可快速创建测试数据库。
- -- phpMyAdmin SQL Dump
- -- version 4.8.5
- -- https://www.phpmyadmin.net/
- --
- -- 主机: localhost
- -- 生成日期: 2022-08-08 10:46:35
- -- 服务器版本: 5.7.26
- -- PHP 版本: 7.3.4
- SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
- SET AUTOCOMMIT = 0;
- START TRANSACTION;
- SET time_zone = "+00:00";
- /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
- /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
- /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
- /*!40101 SET NAMES utf8mb4 */;
- --
- -- 数据库: `edu`
- --
- -- --------------------------------------------------------
- --
- -- 表的结构 `student`
- --
- CREATE TABLE `student` (
- `id` int(11) NOT NULL,
- `name` varchar(32) COLLATE utf8_unicode_ci NOT NULL,
- `email` text COLLATE utf8_unicode_ci NOT NULL,
- `grade` varchar(32) COLLATE utf8_unicode_ci NOT NULL,
- `course` varchar(32) COLLATE utf8_unicode_ci NOT NULL
- ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
- --
- -- 转存表中的数据 `student`
- --
- INSERT INTO `student` (`id`, `name`, `email`, `grade`, `course`) VALUES
- (1, '王兴', 'meituan@qq.com', '80', 'ruby'),
- (2, '黄峥', 'pdd@qq.com', '68', 'mysql'),
- (6, '李彦宏', 'baidu@qq.com', '95', 'python'),
- (5, '马云', 'mayun@qq.com', '88', 'php'),
- (7, '刘强东', 'jd@qq.com', '76', 'C++'),
- (8, '马化腾', '10001@qq.com', '59', 'java'),
- (9, '张一鸣', 'ByteDance@qq.com', '77', 'golang');
- --
- -- 转储表的索引
- --
- --
- -- 表的索引 `student`
- --
- ALTER TABLE `student`
- ADD PRIMARY KEY (`id`);
- --
- -- 在导出的表使用AUTO_INCREMENT
- --
- --
- -- 使用表AUTO_INCREMENT `student`
- --
- ALTER TABLE `student`
- MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=10;
- COMMIT;
- /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
- /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
- /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
Tags: php数据库操作类 pdo数据库操作类
- 上一篇:详解php版阿里云OSS图片上传类
- 下一篇:最后一页
相关文章
- ·php数据库操作类,可用mysql,mssql,pg(2014-09-11)
- ·强大的php数据库操作类,支持mysql,mssql,pg(2015-04-15)
- ·php面象对象数据库操作类实例(2021-05-01)
- ·php实现比较全的数据库操作类(2021-05-28)
- ·PDO的数据库操作类(2014-09-11)
- ·PDO的mysql数据库操作类(2014-09-11)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)