zoukankan      html  css  js  c++  java
  • 引入PDO

    基本需求

    引入PDO之后,用户可以自己选择到底是使用MYSQL还是PDO扩展,只需要在配置文件中进行配置就行了

    而不需要修改项目中的其他的任何代码,实现无缝切换

    基本策略

    封装MysqlDB类和PDODB类,让二者都实现(implements) 相同的接口

    接口中定义一些方法,MyPDO和MySql都会 implements 实现这个接口并且实现所有接口中的方法,

    最近比较懒,代码就不写了

    <?php 
    interface I_dao{
        public  function exec($sql);
        public static function getInstance($arr);
        public function fetchAll($sql);
    
    }

    MyPDO和MySql implements I_dao

    <?php 
    
        /**
         * 数据库连接框架
         */
        class MyPDO implements I_dao
        {
            private static $instance;
            private $host;
            private $user;
            private $pwd;
            private $dbname;
            private $port;
            private $charset;
            private $conne;
            /**
             * 初始化
             */
            private function __construct($data){
                $this->initParam($data);
    
                $this->DBLink();
    
                //开启异常模式
                $this->initSetAttr();
            }
            /**
             * 禁止克隆
             */
            private function __clone(){

    cinfig配置文件中,在App分组下。添加一个默认的数据库连接的类型

    <?php 
    
    //配置文件
    return array(
        /**
         * 配置文件分组
         */
        'db' =>array( // 数据库信息组
            'host' =>'localhost',
            'port'=>'3306',
            'dbname' =>'my_db',
            'user' =>'root',
            'pwd' =>'root',
            'charset' =>'utf8',
        ),
        'App' => array( //应用程序组
            'default_platform' =>'test',   //默认平台
            'default_db' =>'pdo'        //默认数据库pdo
        ),
        'Home' =>array(  //前台平台组
    
        ),
        'Test' =>array( //测试平台组
            'default_controller' =>'Mybank',
            'default_action' =>'show'
        )
    );

    因为我们要操作数据连接,都是在Model父类中有个单例,保存操作的数据库对象,以前我们都是单一的写死 使用pdo的

    现在改写为

    <?php 
    class Model
    {
        protected $link;
        public function __construct(){
            $this->initInstance();
        }
    
        public function initInstance(){
            $config=$GLOBALS['conf']['db'];
            switch($GLOBALS['conf']['App']['default_db']){
                case 'pdo':
                    $this->link = MyPDO::getInstance($config);
                    break;
                case 'mysql':
                    echo "还没有啊";
                    exit;
                    break;
            }
        }
    }

    注意:接口在实现的时候,要添加到自动加载类中,自动类加载也是可以加载接口的

  • 相关阅读:
    springboot应用docker部署调用phantomjs出现permission denied修复方法
    vue某单元格设置背景色
    vue编辑当行数据,弹窗赋值
    vue使用element-ui的el-input监听不了键盘事件解决
    js获取当前域名
    Jedis Redis 模糊匹配 取得 key 列表
    电脑启机时出windowssystem32driversootsafe64.sys
    Vue子组件调用父组件的方法
    Docker 连接mongodb
    Unsatisfied dependency expressed through field 'mongoTemplate'
  • 原文地址:https://www.cnblogs.com/xiaowie/p/14339275.html
Copyright © 2011-2022 走看看