• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    thinkphp3.2.3框架动态切换多数据库的方法分析

    本文实例讲述了thinkphp3.2.3框架动态切换多数据库的方法。分享给大家供大家参考,具体如下:

    版本说明:

    thinkphp3.2.3

    新增自定义行为类

    文件位置:Application/Common/Behaviors/SwitchDbBehavior.class.php

    文件内容:

    namespace Common\Behaviors;
    class SwitchDbBehavior
    {
     //私有库id,如何连接公有库则设置为share字符串
     private $_privateId = '';
     /*
      * 行为扩展的执行入口必须是run
      * $param 为引用传值,所以实参必须是变量
      */
     public function run($params)
     {
       //获取私有库id
       $this->_privateId = empty($params)  session('?privateId') ? (int)session('privateId') : trim($params);
       //echo 'curent database is '.$this->_privateId;
       //默认连接公有库
       if(empty($this->_privateId)) $this->_privateId = 'share';
       $this->_checkDb();
       //连接公有库
       if('share' == trim($this->_privateId))
       {
         $share = $this->_connectShare();
       }else
       //连接私有库
       {
         $share = $this->_connectPrivate($this->_privateId);
       }
       //循环修改数据库配置信息
       foreach($share as $dbKey=>$dbVal)
       {
         C($dbKey,$dbVal);
       }
     }
     /*
     * 判断数据库是否存在
     */
     private function _checkDb()
     {
       //C('PRIVATEIDS') 在配置文件Appliation/Common/Conf/dbname.php中定义
       if(!in_array($this->_privateId,C('PRIVATEIDS')))
       {
         exit(__CLASS__.'->'.__FUNCTION__.': dbName error!');
       }
     }
     /*
     * 返回连接私有库配置
     */
     private function _connectPrivate($privateId)
     {
       return array(
         'DB_TYPE'  => 'mysql', // 数据库类型
         'DB_HOST'  => DB_WECHAT_HOST, // 服务器地址
         'DB_NAME'  => DB_WECHAT_NAME.(int)$privateId, // 数据库名
         'DB_USER'  => DB_WECHAT_USER, // 用户名
         'DB_PWD'  => DB_WECHAT_PASS, // 密码
         'DB_PORT'  => DB_WECHAT_PORT, // 端口
         'DB_PARAMS' => array(), // 数据库连接参数
         'DB_PREFIX' => '', // 数据库表前缀
         'DB_CHARSET'=> 'utf8', // 字符集
         'DB_DEBUG' => DB_WECHAT_DEBUG, // 数据库调试模式 开启后可以记录SQL日志
       );
     }
     /*
     * 返回连接公有库配置
     */
     private function _connectShare()
     {
       return array(
         'DB_TYPE'  => 'mysql', // 数据库类型
         'DB_HOST'  => DB_WECHAT_HOST, // 服务器地址
         'DB_NAME'  => DB_WECHAT_SHARE_NAME, // 数据库名
         'DB_USER'  => DB_WECHAT_USER, // 用户名
         'DB_PWD'  => DB_WECHAT_PASS, // 密码
         'DB_PORT'  => DB_WECHAT_PORT, // 端口
         'DB_PARAMS' => array(), // 数据库连接参数
         'DB_PREFIX' => '', // 数据库表前缀
         'DB_CHARSET'=> 'utf8', // 字符集
         'DB_DEBUG' => DB_WECHAT_DEBUG, // 数据库调试模式 开启后可以记录SQL日志
       );
     }
    }
    
    

    以上文件中用到的常量在我们的配置文件Application/Common/Conf/constant.php中. 内容如下:

    /*数据库配置*/
    define('DB_WECHAT_HOST','127.0.0.1');        //主机host
    define('DB_WECHAT_USER','common');         //用户名
    define('DB_WECHAT_PASS','common');         //密码
    define('DB_WECHAT_NAME','wechat_');         //私有库前缀
    define('DB_WECHAT_SHARE_NAME','wechat_share');   //共有库名
    define('DB_WECHAT_PORT','3306');          //端口
    define('DB_WECHAT_DEBUG',TRUE);          //数据库调试模式 开启后可以记录SQL日志
    
    

    图中代码验证数据库存在不存在的C('PRIVATEIDS')在文件Application/Common/Conf/dbname.php中配置内容如下:

    ?php
    /*
    * 本配置文件主要存储数据库后缀名,
    * 前缀为wechat_,
    * 在Application/Common/Behaviors/TestBehavior.class.php中验证
    * 注意:在新增数据库的时候,注意修改该文件
    *
    * @author: liangxifeng
    * @date: 2016-08-13
    */
    return array(
       'PRIVATEIDS'=>array('share',1,2,3,4)
    );
    
    

    constant.php和dbname.php则是在配置文件Application/Common/Conf/config.php中使用扩展配置选项配置加载;

    'LOAD_EXT_CONFIG' => 'constants,systemConfig,dbname',//加载常量配置

    在使用自定义行为类的时候要在Application/Common/Conf/中新增tags.php

    内容如下:

    /*
    * 扩展行为类配置文件
    * @author:liangxifeng
    * @date:2016-08-13
    */
    return array(
       //应用开始标签位添加切换数据库行为
       'action_begin'=>array('Common\\Behaviors\\SwitchDbBehavior'),
    );

    行为类介绍请点击

    扩展行为类详细了解请点击

    使用方法

    在注册session后或手动加载使用,比如在控制器中:

      public function index()
      {
        //注册session切换数据库
        session('privateId',2);
        //手动切换数据库为私有库
        tag('action_begin',$params='share');
        $wechat = D('Wechat');
        //查询数据库
        $res = $wechat->where('wechat_id=1')->find();
        echo "pre>";
        var_dump($res);
        exit;
      }
    
    

    更多关于thinkPHP相关内容感兴趣的读者可查看本站专题:《ThinkPHP入门教程》、《thinkPHP模板操作技巧总结》、《ThinkPHP常用方法总结》、《codeigniter入门教程》、《CI(CodeIgniter)框架进阶教程》、《Zend FrameWork框架入门教程》及《PHP模板技术总结》。

    希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

    您可能感兴趣的文章:
    • ThinkPHP5.0框架实现切换数据库的方法分析
    • ThinkPHP实现多数据库连接的解决方法
    • tp5(thinkPHP5)框架数据库Db增删改查常见操作总结
    • tp5(thinkPHP5)框架实现多数据库查询的方法
    • ThinkPHP连接数据库及主从数据库的设置教程
    • thinkphp配置连接数据库技巧
    • tp5(thinkPHP5)框架连接数据库的方法示例
    • ThinkPHP连接数据库的方式汇总
    • ThinkPHP3.2.3数据库设置新特性
    • thinkphp 框架数据库切换实现方法分析
    上一篇:php的RSA加密解密算法原理与用法分析
    下一篇:TP3.2.3框架文件上传操作实例详解
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    thinkphp3.2.3框架动态切换多数据库的方法分析 thinkphp3.2.3,框架,动态,切换,