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

作者:TANKING- 时间:2023-05-25 11:15:05 

数据库操作类的优点

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

代码

Db.php

<?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

<?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);
?>

数据库表格结构

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

SQL

全选下面的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 */;

来源:https://blog.csdn.net/weixin_39927850/article/details/127913238

标签:php,pdo,数据库
0
投稿

猜你喜欢

  • 关于shopex同步ucenter的redirect问题,导致script不运行

    2023-07-13 05:20:53
  • python如何让类支持比较运算

    2022-07-07 13:02:52
  • Python+Selenium实现自动化的环境搭建的步骤(图文)

    2022-02-23 23:59:33
  • python 判断字符串中是否含有汉字或非汉字的实例

    2022-07-01 11:25:59
  • SQL Server常见问题及解决方法分享

    2024-01-15 01:45:30
  • Python爬虫之urllib库详解

    2022-01-09 23:03:27
  • Python中 CSV格式清洗与转换的实例代码

    2023-02-19 02:23:57
  • Django choices下拉列表绑定实例

    2023-05-06 14:08:52
  • python实现带界面的井字棋小游戏

    2022-11-14 22:28:24
  • GoLang unsafe包详细讲解

    2024-02-02 05:09:46
  • 聊聊golang的defer的使用

    2023-07-21 13:15:02
  • 查看连接mysql的IP地址的实例方法

    2024-01-27 14:33:49
  • python-yml文件读写与xml文件读写

    2022-06-16 06:43:50
  • element弹窗表格的字体模糊bug解决

    2024-04-18 10:53:25
  • Python中使用SAX解析xml实例

    2022-08-22 01:32:56
  • Python 一键获取百度网盘提取码的方法

    2023-11-30 06:13:49
  • Python中有趣在__call__函数

    2022-04-04 14:06:22
  • 破解安装Pycharm的方法

    2021-08-17 17:54:12
  • Python的@property的使用

    2021-03-27 11:02:25
  • python实现m3u8格式转换为mp4视频格式

    2021-05-09 00:48:02
  • asp之家 网络编程 m.aspxhome.com