搜索

查看: 3115|回复: 11

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

[复制链接]
发表于 2023-5-4 17:06:22 | 显示全部楼层 |阅读模式
Editor 2023-5-4 17:06:22 3115 11 看全部
目录
  • 数据库操作类的优点
  • 代码
  • 调用
  • 数据库表格结构
  • SQL
    数据库操作类的优点
    优点可以说是非常多了,常见的优点就是便于维护、复用、高效、安全、易扩展。例如PDO支持的数据库类型是非常多的,与mysqli不同的就是,PDO还支持其他数据库,一套写法多种数据库的匹配,而mysqli仅仅是支持mysql。

    代码
    Db.php
    '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
    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 fetch($sql);
    // var_dump($row);
    // // 查询多条操作
    // $sql = "SELECT id,name,email,grade FROM student WHERE grade > '80'";
    // $rows = $db->fetchAll($sql);
    // var_dump($rows);
    ?>
    数据库表格结构

    2022122116281536.png

    2022122116281536.png


    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 */;
    到此这篇关于php实现pdo数据库操作类过程详解的文章就介绍到这了,更多相关php pdo数据库操作内容请搜索知鸟论坛以前的文章或继续浏览下面的相关文章希望大家以后多多支持知鸟论坛
  • 回复

    使用道具 举报

    发表于 2023-6-29 00:15:48 | 显示全部楼层
    123456825 2023-6-29 00:15:48 看全部
    其实我一直觉得楼主的品味不错!呵呵!知鸟论坛太棒了!
    回复

    使用道具 举报

    发表于 2023-6-29 22:04:12 | 显示全部楼层
    掌舵的鱼1987 2023-6-29 22:04:12 看全部
    楼主发贴辛苦了,谢谢楼主分享!我觉得知鸟论坛是注册对了!
    回复

    使用道具 举报

    发表于 2023-6-30 20:44:44 | 显示全部楼层
    井底燕雀傥 2023-6-30 20:44:44 看全部
    楼主发贴辛苦了,谢谢楼主分享!我觉得知鸟论坛是注册对了!
    回复

    使用道具 举报

    发表于 2023-6-30 22:48:13 | 显示全部楼层
    尘埃416 2023-6-30 22:48:13 看全部
    楼主,我太崇拜你了!我想我是一天也不能离开知鸟论坛
    回复

    使用道具 举报

    发表于 2023-7-4 02:44:56 | 显示全部楼层
    永远就三年疗 2023-7-4 02:44:56 看全部
    论坛不能没有像楼主这样的人才啊!我会一直支持知鸟论坛
    回复

    使用道具 举报

    发表于 2023-7-6 04:35:47 | 显示全部楼层
    123456823 2023-7-6 04:35:47 看全部
    楼主,我太崇拜你了!我想我是一天也不能离开知鸟论坛
    回复

    使用道具 举报

    发表于 2023-7-6 06:32:53 | 显示全部楼层
    落败的青春阳落s 2023-7-6 06:32:53 看全部
    其实我一直觉得楼主的品味不错!呵呵!知鸟论坛太棒了!
    回复

    使用道具 举报

    发表于 2023-7-6 11:06:19 | 显示全部楼层
    音乐之家1 2023-7-6 11:06:19 看全部
    这个帖子不回对不起自己!我想我是一天也不能离开知鸟论坛
    回复

    使用道具 举报

    发表于 2023-7-6 20:22:33 | 显示全部楼层
    执着等待等wc 2023-7-6 20:22:33 看全部
    这东西我收了!谢谢楼主!知鸟论坛真好!
    回复

    使用道具 举报

    • 您可能感兴趣
    点击右侧快捷回复 【请勿灌水】
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则 返回列表

    RSS订阅| SiteMap| 小黑屋| 知鸟论坛
    联系邮箱E-mail:zniao@foxmail.com
    快速回复 返回顶部 返回列表