本文实例讲述了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 条评论) |