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配 ...
随机推荐
- CentOS更换源
这里介绍如何把CentOS默认镜像源更换为阿里云镜像源 1.备份 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.r ...
- LeetCode算法题-Sum of Left Leaves(Java实现)
这是悦乐书的第217次更新,第230篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第85题(顺位题号是404).找到给定二叉树中所有左叶的总和.例如: 二叉树中有两个左叶 ...
- [福大软工] Z班 第5次成绩排行榜
作业链接 http://www.cnblogs.com/easteast/p/7613070.html 作业要求 团队项目--选题报告 1)发布博客: 一个团队发布一篇随笔,内容为团队的选题报告,选题 ...
- C语言入坑指南-被遗忘的初始化
前言 什么是初始化?为什么要初始化?静态变量和局部变量的初始化又有什么区别?实际应用中应该怎么做?本文将一一回答这些问题. 什么是初始化 初始化指的是对数据对象或者变量赋予初始值.例如: int va ...
- 比MR至少快5倍的神器,竟然是它
Hive简介 Hive是一个基于 Hadoop 的开源数据仓库工具,用于存储和处理海量结构化数据.它最初是应Facebook对每天产生的海量新兴社会网络数据进行管理和机器学习的需求而产生和发展的,Hi ...
- C# 生成和解析二维码
下面是C#和JAVA两个版本的开放源码下载: C#:http://www.codeproject.com/Articles/20574/Open-Source-QRCode-Library JAVA: ...
- Linux中运行.sh脚本,异常/bin/sh^M: bad interpreter: No such file or directory。
在Linux中运行.sh脚本,异常/bin/sh^M: bad interpreter: No such file or directory. 分析:这是不同系统编码格式引起的:在windows系统中 ...
- [HAOI2018]染色
嘟嘟嘟 这题当时没想出来(因为本人实在不太擅长计数),然后又被luogu的第一篇题解吓怕了,就咕了一小段时间再写. 其实这题不是很难. 做法就是基础容斥+NTT. 首先出现\(S\)次的颜色最多有\( ...
- windows解决访问github慢问题
·1.更改host文件 文件地址: C:\Windows\System32\Drivers\etc 如果不能直接修改,可拷贝到桌面修改后再复制回去 2.在host文件追加 #github 19 ...
- Spring Security(二十一):6.3 Advanced Web Features
6.3.1 Remember-Me Authentication (记住我的身份验证) See the separate Remember-Me chapter for information on ...