thinkphp切换数据库链接方法汇总

本文详细介绍了在Model类中如何进行数据库连接的全局与局部切换,以及M()方法实例化时如何切换数据库链接。同时探讨了切换数据库链接后对后续M()方法的影响及解决方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、在Model类中进行切换【推荐】

1、全局切换

   此Model类中所有的操作都是使用的$connection的配置参数

//在模型里单独设置数据库连接信息
 protected $connection = array(
    'db_type'  => 'mysql',
    'db_user'  => 'root',
    'db_pwd'   => '123456',
    'db_host'  => 'localhost',
    'db_port'  => '3306',
    'db_name'  => 'thinkphp',
 );
 protected $connection = 'mysql://root:123456@localhost/thinkphp';

2、局限到某一方法

    可能某些时候我们只是需要某一个方法去执行读取其他的数据库的操作

//config.php
在项目配置中添加 

'OTHER_DB_CONFIG' => array(
    'db_type'  => 'mysql',
    'db_user'  => 'root',
    'db_pwd'   => '123456',
    'db_host'  => 'localhost',
    'db_port'  => '3306',
    'db_name'  => 'thinkphp',
)

或

'OTHER_DB_CONFIG' => 'mysql://root:123456@localhost/thinkphp'

配置项,是为了方便简介的设置而已,你在Model里定义也没事

//YourModel.class.php
public function switchDb(){
    //此处的1为初次使用其他数据库链接时的设定的编号,以后在使用此链接时只需要db(1)即可,db(0)是默认的
    $this->db(1,"OTHER_DB_CONFIG")->query();
    //切换会默认的
    $this->db(0);
}

二、在M()实例化对象时切换

3、M方法实例化时切换

$model = M('TableName', 'db_','OTHER_DB_CONFIG');

    不过我在使用中M()切换后此后的M()方法使用的数据库链接也都是切换后的,也就是说即便你之后的M()没有传入后两个参数,它也没有去使用项目配置里默认的,这让我有些苦恼,只能写在Model里了,虽然都是某个表的实例模型,但貌似M()切换会对其他的表的数据库链接造成影响,木找到回归默认链接的方法,知道的求告知补脑~





转载于:https://my.oschina.net/sallency/blog/382222

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值