CodeIgniter框架版本:3.1.7 ,php版本:5.6.* ,mysql版本:5.6

  在Ci框架中,可以在application/config/database.php中配置多个group,比如:

  下面的代码分别定义了3个group,两个线上group分别是write和read,另外一个是offline的group,注意offline的group的ip和前两个group的ip是不一样的。

<?php
$active_group = 'write';
$query_builder = TRUE; $db['write'] = array(
'hostname' => '127.0.0.1',
'username' => 'root',
'password' => '123456',
'database' => 'test',
'dbdriver' => 'mysqli',
#......
); $db['read'] = array(
'hostname' => '127.0.0.1',
'username' => 'root',
'password' => '123456',
'database' => 'exam',
'dbdriver' => 'mysqli',
#.......
); $db['offline'] = array(
'hostname' => '192.168.32.91',
'username' => 'root',
'password' => 'root',
'database' => 'demo',
'dbdriver' => 'mysqli',
#.......
);

  下面所有实验的前提:已经开启自动载入database。

 Case1: 开启自动载入database,即加载write group

<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Hello extends CI_Controller {
public function index(){
$res = $this->db->query("select * from t1");
print_r($res->result_array()); }
}

  访问Hello控制器的index方法,会读数据库配置中的write group中的test.t1表。

  Case 2:  不切换数据库连接(连接的仍然是同一台主机上的数据库服务器,只切换数据库)

<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Hello extends CI_Controller {
public function index(){
$this->db->db_select("exam");
$res = $this->db->query("select * from tt");
print_r($res->result_array()); }
}

  上面的代码虽然切换到了exam数据库,但是使用的还是write group的连接,并且$this->db->db_select()的源码中也是使用的mysqli内置的select_db()方法。所以这次读的是 exam.tt表,使用的组是write。

  注意:如果使用db_select切换数据库之后,如果切换的数据库未找到,那么框架仍会使用切换数据库之前的数据库,这里指的是test数据库。

  Case 3: 通过切换group来实现切换数据库,注意连接的仍然是同一台主机上的数据库服务器

<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Hello extends CI_Controller {
public function index(){
$this->db = null;
$this->load->database("read");
$res = $this->db->query("select * from tt");
print_r($res->result_array()); }
}

  上面的代码中先将$this->db设为null,然后在手动载入database。然后访问hello控制器的index方法,最终程序访问的是数据库配置文件中的read group,读取的是exam.tt表。

  注意:如果没有手动将$this->db设为null,那么即使后面手动载入了read group,访问的仍然是 write group,也就是说,程序仍然会去查 test库的tt表,然而我们想要的是去查exam库的tt表。

  Case 4:通过切换group实现切换数据库,同时切换了另外一台主机上的数据库服务器:

<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Hello extends CI_Controller {
public function index(){
$this->db = null;
$this->load->database("offline");
$res = $this->db->query("select * from off_t");
print_r($res->result_array()); }
}

  和上面的一个实验类似,先将$this->db = null,然后选择offline组,所以最终查询的是 offline组的demo库中的off_t表。

  

  

CI框架在控制器中切换读写库和读写库的更多相关文章

  1. CI框架在模型中切换读写库和读写库

    如果你想在控制器中切换在application/config/database.php中配置好的数据库group,那么你可以参考这篇博客:CI框架在控制器中切换读写库和读写库 如果你是希望在模型中切换 ...

  2. CI框架在辅助函数中使用配置文件中的变量

    问题: 现有一个自定义的辅助函数,想要获取配置文件中的配置项(配置文件路径为application/config/config.php) 分析: 辅助函数并不是定义在一个class中,而是很多个可供外 ...

  3. 去掉CI框架默认url中的index.php

    1:.htaccess //放置在根目录下,和入口文件index.php的同级目录<IfModule mod_rewrite.c>RewriteEngine onRewriteCond % ...

  4. CI框架--数据库Query_Builder中的方法

    下面是DB_Query_Builder.php中,各个方法的声明: 选择字段(select) public function select($select = '*', $escape = NULL) ...

  5. 用CI框架向数据库中实现简单的增删改查

    以下代码基于CodeIgniter_2.1.3版 用PHP向数据库中实现简单的增删改查(纯代码)请戳 http://www.cnblogs.com/corvoh/p/4641476.html Code ...

  6. CI 框架去掉url 中index.php的方法

    1 修改 apache 的 httpd.conf 文件 #LoadModule rewrite_module modules/mod_rewrite.so 去掉前面的# 2 找到 你程序目录下的 .h ...

  7. **【ci框架】精通CodeIgniter框架

    http://blog.csdn.net/yanhui_wei/article/details/25803945 一.大纲 1.codeigniter框架的授课内容安排 2.codeigniter框架 ...

  8. CI框架大纲总结

    一.大纲 1.codeigniter框架的授课内容安排 2.codeigniter框架的简介 |-----关于框架的概念 |-----使用CI框架的好处 |-----为什么选择CI框架 3.codei ...

  9. CI框架从哪里看起?CI框架怎么开始学习,CI的初始设置

    很多朋友不知道CI框架从哪里开始学起,想学一个新的框架其实并不难.只要你认真研究,自习摸索都很简单! 概述和基本配置参数 配置CI: application/config/config.php:14配 ...

随机推荐

  1. js data日期初始化的5种方法 [转]

    创建一个日期对象: 复制代码代码如下: var objDate=new Date([arguments list]);  参数形式有以下5种: 1)new Date("month dd,yy ...

  2. inline-block,一个奇怪的问题:中间div掉下来

    先上代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <tit ...

  3. vue过渡动画

    概述 Vue 在插入.更新或者移除 DOM 时,提供多种不同方式的应用过渡效果.包括以下工具: 在 CSS 过渡和动画中自动应用 class 可以配合使用第三方 CSS 动画库,如 Animate.c ...

  4. SQLite的原子提交--单文件场景

    3. 单文件提交 我们首先概要说明SQLite在单个数据库文件上为了执行事务的原子提交而采取的步骤.在后面的部分将讨论如何设计文件格式以保护其在断电故障中损坏,以及原子提交在多个数据库上的执行. 3. ...

  5. ASP.Net:Javascript 通过PageMethods 调用后端WebMethod方法 + 多线程数据处理 示例

    ASP.Net:Javascript 通过PageMethods 调用后端WebMethod方法 + 多线程数据处理 示例 2012年04月27日 16:59:16 奋斗的小壁虎 阅读数:4500   ...

  6. ORA-01034:ORACLE not available ORA-27101:shared memory realm does not exit

    ORA-01034:ORACLE not available ORA-27101:shared memory realm does not exit   ERROR: ORA-01034:ORACLE ...

  7. 【vue】css解决“防抖动”——防止页面加载图片抖动

    overflow:hidden;height:0;padding-bottom:*; // 其中*处填 图片的高宽百分比=高/宽*100%

  8. kmeans聚类理论篇

    前言 kmeans是最简单的聚类算法之一,但是运用十分广泛.最近在工作中也经常遇到这个算法.kmeans一般在数据分析前期使用,选取适当的k,将数据分类后,然后分类研究不同聚类下数据的特点. 本文记录 ...

  9. 下面哪项技术可以用在WEB开发中实现会话跟踪实现?

    下面哪项技术可以用在WEB开发中实现会话跟踪实现? A:session B:Cookie C:地址重写 D:隐藏域 答案:ABCD 会话跟踪是一种灵活.轻便的机制,它使Web上的状态编程变为可能. H ...

  10. NuGet的本地服务器安装与Package的发布(呕吐)

    主要的步骤是按照下面的例子来做的: NuGet学习笔记(1)——初识NuGet及快速安装使用 NuGet学习笔记(2)——使用图形化界面打包自己的类库 NuGet学习笔记(3)——搭建属于自己的NuG ...