php 动态切换数据库,thinkphp多数据库动态切换

thinkphp作为国内使用广泛的PHP框架,功能很强大,数据库支持方面做的也很好,并支持mongo操作,我们的项目是配置了两台数据库,一主一从,读写分离,最近要做一个活动,要求读写都在一个库上,所以需要动态建立多个数据库连接,主连接跟活动数据库连接,配置方式如下

首先配置默认数据库,两台,一主一从,读写分离

配置信息在项目工程文件夹下的Conf/config.php

'DB_TYPE' => 'mysqli', // 数据库类型 注意这里用的是mysqli

'DB_HOST' => '10.1.80.28,10.1.80.29', // 服务器地址

'DB_NAME' => 'rr_home', // 数据库名

'DB_USER' => '******', // 用户名

'DB_PWD' => '******', // 密码

'DB_PORT' => '3306,3307', // 端口

'DB_PREFIX' => 'rr_', // 数据库表前缀

'DB_FIELDTYPE_CHECK' => false, // 是否进行字段类型检查

'DB_FIELDS_CACHE' => true, // 启用字段缓存

'DB_CHARSET' => 'utf8', // 数据库编码默认采用utf8

'DB_DEPLOY_TYPE' => 1, // 数据库部署方式:0 集中式(单一服务器),1 分布式

'DB_RW_SEPARATE' => true, // 数据库读写是否分离 主从式有效

'DB_MASTER_NUM' => 1, // 读写分离后 主服务器数量

配置好config.php之后,数据模型类继承thinkphp的核心类库Model类,那么该模型类便可以直接调用thinkphp提供的数据库操作方法

活动模型数据库配置

Conf文件夹下新建activity.php文件,活动库的配置信息写到该文件内

return array(

'DB_CONFIG' => array(

'db_type' => 'mysql', //注意这里用的是mysql

'db_host' => '10.1.80.28',

'db_user' => '******',

'db_pwd' => '******',

'db_name' => 'rr_activity',

'db_port' => '3306',

'db_prefix'=> 'rr_'

),

);

config.php内加入以下代码加载activity.php扩展配置

'LOAD_EXT_CONFIG' => array('ACTIVITY'=>'activity'),

新建ActivityModel.class.php继承Model.class.php

table_prefix = $this->table_prefix ? $this->table_prefix : C('DB_PREFIX');

$this->connection = !empty($this->connection) ? array_merge(C('ACTIVITY.DB_CONFIG'), $this->connection) : C('ACTIVITY.DB_CONFIG');

parent::__construct($this->table_name,$this->table_prefix,$this->connection,888);

}

}

注意:初始化调用父类Model类的构造方法,加了一个参数:888,这个代表该数据库连接的id,指定活动库的连接id为固定的888(默认mongo的连接id为999)

其他活动用的类继承该活动父类,便可以直接调用thinkphp提供的数据库操作方法,并且读写只在10.1.80.28这一台数据库上。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值