CI框架在控制器中切换读写库和读写库
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框架在控制器中切换读写库和读写库的更多相关文章
- CI框架在模型中切换读写库和读写库
如果你想在控制器中切换在application/config/database.php中配置好的数据库group,那么你可以参考这篇博客:CI框架在控制器中切换读写库和读写库 如果你是希望在模型中切换 ...
- CI框架在辅助函数中使用配置文件中的变量
问题: 现有一个自定义的辅助函数,想要获取配置文件中的配置项(配置文件路径为application/config/config.php) 分析: 辅助函数并不是定义在一个class中,而是很多个可供外 ...
- 去掉CI框架默认url中的index.php
1:.htaccess //放置在根目录下,和入口文件index.php的同级目录<IfModule mod_rewrite.c>RewriteEngine onRewriteCond % ...
- CI框架--数据库Query_Builder中的方法
下面是DB_Query_Builder.php中,各个方法的声明: 选择字段(select) public function select($select = '*', $escape = NULL) ...
- 用CI框架向数据库中实现简单的增删改查
以下代码基于CodeIgniter_2.1.3版 用PHP向数据库中实现简单的增删改查(纯代码)请戳 http://www.cnblogs.com/corvoh/p/4641476.html Code ...
- CI 框架去掉url 中index.php的方法
1 修改 apache 的 httpd.conf 文件 #LoadModule rewrite_module modules/mod_rewrite.so 去掉前面的# 2 找到 你程序目录下的 .h ...
- **【ci框架】精通CodeIgniter框架
http://blog.csdn.net/yanhui_wei/article/details/25803945 一.大纲 1.codeigniter框架的授课内容安排 2.codeigniter框架 ...
- CI框架大纲总结
一.大纲 1.codeigniter框架的授课内容安排 2.codeigniter框架的简介 |-----关于框架的概念 |-----使用CI框架的好处 |-----为什么选择CI框架 3.codei ...
- CI框架从哪里看起?CI框架怎么开始学习,CI的初始设置
很多朋友不知道CI框架从哪里开始学起,想学一个新的框架其实并不难.只要你认真研究,自习摸索都很简单! 概述和基本配置参数 配置CI: application/config/config.php:14配 ...
随机推荐
- js data日期初始化的5种方法 [转]
创建一个日期对象: 复制代码代码如下: var objDate=new Date([arguments list]); 参数形式有以下5种: 1)new Date("month dd,yy ...
- inline-block,一个奇怪的问题:中间div掉下来
先上代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <tit ...
- vue过渡动画
概述 Vue 在插入.更新或者移除 DOM 时,提供多种不同方式的应用过渡效果.包括以下工具: 在 CSS 过渡和动画中自动应用 class 可以配合使用第三方 CSS 动画库,如 Animate.c ...
- SQLite的原子提交--单文件场景
3. 单文件提交 我们首先概要说明SQLite在单个数据库文件上为了执行事务的原子提交而采取的步骤.在后面的部分将讨论如何设计文件格式以保护其在断电故障中损坏,以及原子提交在多个数据库上的执行. 3. ...
- ASP.Net:Javascript 通过PageMethods 调用后端WebMethod方法 + 多线程数据处理 示例
ASP.Net:Javascript 通过PageMethods 调用后端WebMethod方法 + 多线程数据处理 示例 2012年04月27日 16:59:16 奋斗的小壁虎 阅读数:4500 ...
- 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 ...
- 【vue】css解决“防抖动”——防止页面加载图片抖动
overflow:hidden;height:0;padding-bottom:*; // 其中*处填 图片的高宽百分比=高/宽*100%
- kmeans聚类理论篇
前言 kmeans是最简单的聚类算法之一,但是运用十分广泛.最近在工作中也经常遇到这个算法.kmeans一般在数据分析前期使用,选取适当的k,将数据分类后,然后分类研究不同聚类下数据的特点. 本文记录 ...
- 下面哪项技术可以用在WEB开发中实现会话跟踪实现?
下面哪项技术可以用在WEB开发中实现会话跟踪实现? A:session B:Cookie C:地址重写 D:隐藏域 答案:ABCD 会话跟踪是一种灵活.轻便的机制,它使Web上的状态编程变为可能. H ...
- NuGet的本地服务器安装与Package的发布(呕吐)
主要的步骤是按照下面的例子来做的: NuGet学习笔记(1)——初识NuGet及快速安装使用 NuGet学习笔记(2)——使用图形化界面打包自己的类库 NuGet学习笔记(3)——搭建属于自己的NuG ...