首页 > 作文

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

更新时间:2023-04-08 15:01:01 阅读: 评论:0

本文实例讲述了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) && ssion('?privateid') ? (int)ssion('privateid') : trim($params);   //echo 'curent databa is '.$this->_privateid;   //默认连接公有库   if(empty($this->_privateid)) $this->_privateid = 'share';   $this->_checkdb();   //连接公有库   if('share' == tr垓下歌im($this->_privateid))   {     $share = $this->_connectshare();   }el   //连接私有库   {     $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', // 数据库类型     'd北京未来十五天天气b_host'  => db_wechat_host, // 服务器地址     'db_name'  => db_wechat_name.(int)$privateid, // 数据库名     'db_ur'  => db_wechat_ur, // 用户名     'db_pwd'  => db_wechat_pass, // 密码     'db_port'  => db_wechat_port, // 端口     'db_params' => array(), // 数据库连接参数     'db_prefix' => '', // 数据库表前缀     'db_chart'=> '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_ur'  => db_wechat_ur, // 用户名     'db_pwd'  => db_wechat_pass, // 密码     'db_port'  => db_wechat_port, // 端口     'db_params' => array(), // 数据库连接参数     'db_prefix' => '', // 数据库表前缀     'db_chart'=> 'utf8', // 字符集     'db_debug' => db_wechat_debug, // 数据库调试模式 开启后可以记录sql日志   ); }}

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

/*数据库配置*/define('db_wechat_host','127.0.0.1');        //主机hostdefine('db_wechat_ur','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'),);

使用方法

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

  public function index()  {    //注册ssion切换数据库    ssion('privateid',2);    //手动切换数据库为私有库    tag('action_begin',$params='share');    $wechat = d('wechat');    //查询数据库    $res = $wechat->where('wechat_id=1')->find();    echo 老百晓"<pre>";    var_dump($res高一语文课本);    exit;  }

本文发布于:2023-04-08 15:00:59,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/56a526acc6c297d9879fb9908e03dd72.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:thinkphp3.2.3框架动态切换多数据库的方法分析.doc

本文 PDF 下载地址:thinkphp3.2.3框架动态切换多数据库的方法分析.pdf

标签:数据库   前缀   配置文件   文件
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图