thinkphp之切换数据库

1.数据库切换

  原因:在我们实际的项目开发中,经常会遇到一个项目使用多个数据库,那么在使用thinkphp框架的时候,存在使用过程中数据库转换使用的问题,或者多个数据库同时使用的问题,接下来一起研究研究如何切换数据库。

  首先,我们在使用tp框架的时候会预先定义数据库连接和实例化的时候指定数据库连接,这样我们只能预定义连接一个数据库,然而我们还可以在模型操作过程中动态的切换数据库,支持切换到相同和不同的数据库类型。

  使用方法:

  Model->db("数据库编号","数据库配置");

  数据库编号:数据库编号用数字格式,对于已经调用过的数据库连接,是不需要再传入数据库连接信息的,系统会自动记录。对于默认的数据库连接,内部的数据库编号是0,因此为了避免冲突,请不要再次定义数据库编号为0的数据库配置。

  数据库配置:数据库配置的定义方式:支持数组、字符串以及调用配置参数三种格式。

  

  Db方法 调用后返回当前的模型实例,直接可以继续进行模型的其他操作,所以该方法可以在查询的过程中动态切换:

$this->db(1,"mysql://root:[email protected]:3306/test")->query("查询SQL");

  该方法添加了一个编号为1的数据库连接,并自动切换到当前的数据库连接。

 当第二次切换到相同的数据库的时候,就不需要传入数据库连接信息了,可以直接使用:

$this->db(1)->query("查询SQL");

   那么,当我们需要切换回主数据库时,只需要:

$this->db(0);

  例如:定义一个主数据库和一个副数据库:

    

//主数据库配置0
‘DB_CONFIG1‘ = array(
   ‘db_type‘  => ‘mysql‘,
   ‘db_user‘  => ‘root‘,
   ‘db_pwd‘   => ‘1234‘,
    ‘db_host‘  => ‘localhost‘,
   ‘db_port‘  => ‘3306‘,
   ‘db_name‘  => ‘thinkphp‘
),
//副数据库配置1
‘DB_CONFIG2‘ => ‘mysql://root:[email protected]:3306/thinkphp‘;

  对于上面例子中的数据库切换:

$this->db(1,"DB_CONFIG1")->query("查询SQL");
$this->db(2,"DB_CONFIG2")->query("查询SQL");

  那么在切换数据库后,怎么指向我们需要用到的数据表呢?  使用table方法指定要操作的数据表。

$this->db(1)->table("top_user")->find();
时间: 2024-10-16 11:39:43

thinkphp之切换数据库的相关文章

zabbix切换数据库思路

zabbix切换数据库操作 1.安装mysql-server数据库 ,讲三个表结构复制过去 将schema.sql  images.sql   data.sql  数据库从zabbix服务器上复制到/root路径下面 然后导入表结构 [[email protected] ~]#  /usr/bin/mysql -uzabbix -pzabbix zabbix < /root/schema.sql Warning: Using a password on the command line inte

SQLSERVER 切换数据库为单用户和多用户模式

有时候数据库在占用时,想做一些操作,无法操作.可以尝试将数据库切换为单用户模式来操作.操作完之后再切换回多用户模式. 命令如下: alter database 数据库名 set Single_user  --单用户alter database 数据库名 set multi_user   --多用户 或者 sp_dboption 数据库名,"single user",true  --单用户 sp_dboption 数据库名,"single user",false  -

切换数据库+ThreadLocal+AbstractRoutingDataSource

最近项目用的数据库要整合成一个,所以把多源数据库切换的写法要清除掉.所以以下记载了多远数据库切换的用法及个人对源码的理解. 框架:Spring+mybatis+vertx,(多源数据库切换的用法不涉及vertx,所以,适用于ssh,sm,ssh...). 数据库:mysql 两个关键的api: 一:ThreadLocal, 二:AbstractRoutingDataSource. 我一直坚持先先学会使用,在去探究源码和原理. 部分一(实现代码): 以下为实现代码: DatabaseSource.

MySQL访问时无法切换数据库的问题!

问题: 访问数据查东西的时候,切换数据库卡在一个地方,需要等好久. Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A 了解: 一般产生这个问题是由于MYSQL中数据库太大,导致读取预读时间太长,从而显示这个提示,如果之前都没有遇到这个问题,那么产生这个问题的原因可能是由于有改变数据库信息的

Mybatis 动态切换数据库

mybatis介绍: 每一个Mybatis的应用程序都以一个SqlSessionFactory对象的实例为核心.SqlSessionFactory对象实例可以通过SqlSessionFactoryBuilder对象获得.SqlSessionFactoryBuilder对象可以从XML配置文件或从Configuration类的习惯准备的实例中构建SqlSessionFactory对象. 从XML文件中构建SqlSessionFactory的实例非常简单.这里建议使用类的路径的资源文件来配置,这样我

基于AbstractRoutingDataSource的动态切换数据库

当项目发展到一定阶段,就需要对数据库进行一定的优化.一般会对数据库进行横向和纵向切库分表,但是这样的问题就来了,在我们操作数据库时,需要根据切分规则提前获得我们需要的数据库的连接,这明显会加重程序员的负担. 比如我们将"用户信息数据库"按照用户注册的年月来分库,在用户注册的时候,为用户分配一个以yyyyMM开头的唯一标示,以方便我们能快速定位到切分后的子数据库.那么问题来了,我们在项目中,如何动态且方便的获得我们需要的数据源呢?Spring提供了一个解决方案,那就是基于Abstract

thinkphp访问其他数据库方法

M('[基础模型名:]模型名','数据表前缀','数据库连接信息') $User = M('User','think_','mysql://user_a:[email protected]:3306/thinkphp'); 在config.php增加 'DB_CONFIG2' => 'mysql://root:localhost@115.*.*.*/tbname', 使用方法 M('User','think_','DB_CONFIG2'); 或者 M()->db(2,"DB_CONF

动态切换数据库(EF框架)

         文章简略:本文测试项目为Silverlight+EF+RIA Service动态切换数据库的问题 通常,Ado.net EntityFramework的数据库连接字符串ConnectionString是存在实体框架所在的类库项目中的配置文件中(.config)的,类似这样: <connectionStrings> <add name="{EFName}Entities" connectionString="metadata=res://*/

【学亮IT手记】mysql创建/查看/切换数据库

--创建数据库 create database web_test1 CHARACTER set utf8; --切换数据库 use web_test1; --查看当前使用的数据库 select DATABASE(); 原文地址:https://www.cnblogs.com/niwotaxuexiba/p/10346618.html