CI框架中配置多数据库连接并执行跨库查询
在开发Web应用时,经常需要同时访问多个数据库。本文将详细演示如何在CodeIgniter框架中配置第二个数据库,并通过控制器直接调用该连接执行原生SQL查询,避免为每个库创建复杂的Model层。
实现目标与原理
CodeIgniter默认仅支持单一数据库连接。通过修改配置文件并手动加载不同的连接组(Connection Group),可以实现“主库+附加库”的多库读写分离或跨库操作。核心在于利用 $this->load->database() 方法的返回值特性,获取特定数据库的Active Record对象。
配置环境准备
在开始编码前,请确保你的项目已安装CodeIgniter框架,并且你已经掌握了基本的Controller和Model编写结构。我们需要访问的核心文件是:
application/config/database.php:存放所有数据库连接配置。application/controllers/YourController.php:处理业务逻辑的控制器。
具体操作步骤
第1步:添加新的数据库配置信息
打开 application/config/database.php 文件,找到 $db 数组。你可以复制现有的默认数据库配置块,并将其键名(Key)修改为一个唯一的标识符,例如 'XX'。此标识符将在后续代码中被引用。
$db['default'] = array(
'dsn' => '',
'hostname' => 'localhost',
'username' => 'root',
'password' => '',
'database' => 'main_db',
// ... 其他默认配置
);
// 新增第二个数据库配置
$db['XX'] = array(
'dsn' => '',
'hostname' => 'localhost', // 如果是不同服务器,请更改IP
'username' => 'user2',
'password' => 'pass2',
'database' => 'secondary_db',
'dbdriver' => 'mysqli',
'dbprefix' => '',
'pconnect' => FALSE,
'db_debug' => TRUE,
'cache_on' => FALSE,
'cachedir' => '',
'char_set' => 'utf8',
'dbcollat' => 'utf8_general_ci',
'swap_pre' => '',
'encrypt' => FALSE,
'compress' => FALSE,
'stricton' => FALSE,
'failover' => array(),
);
注意:'XX' 是你的自定义键名,请确保其拼写与后续代码完全一致。如果有更多数据库,可以继续添加 'YY', 'ZZ' 等配置块。
第2步:在控制器中加载指定的数据库连接
进入你的控制器文件(如 YourController.php)。在构造函数 __construct() 或某个具体方法中,使用 $this->load->database() 方法来加载之前定义的 'XX' 配置。
关键参数说明:
- 第一个参数:字符串
'XX',对应database.php中配置的数组键名。 - 第二个参数:布尔值
TRUE。**必须设置为 TRUE**。这告诉CodeIgniter返回一个包含Active Record类的连接ID对象,而不是默认的$this->db全局变量赋值。
<?php
class YourController extends CI_Controller {
public function __construct() {
parent::__construct();
// 加载主数据库(可选,通常由autoload自动完成)
// $this->load->model('DefaultModel');
// 加载第二个数据库,并将连接对象赋值给自定义变量
// 第二个参数 TRUE 表示返回连接ID,启用Active Record
$this->xx_db = $this->load->database('XX', TRUE);
}
public function index() {
// 此时,$this->xx_db 即为第二个数据库的Active Record实例
// 而 $this->db 依然是默认的主数据库连接
$sql = "SELECT * FROM users WHERE status = 1";
$query = $this->xx_db->query($sql);
$result = $query->result();
print_r($result);
}
}
?>
完成判断与注意事项
当页面访问上述控制器时,如果能成功从 secondary_db 中提取数据,则说明配置成功。请注意以下几点以确保稳定性:
- 无需Model文件:对于这种临时性或低频使用的附加数据库,直接使用
$this->xx_db->query()执行原生SQL是最简便的方式,不需要专门为该库创建对应的Model类。 - 命名冲突:建议将附加库的连接对象命名为具有区分度的名称(如
$this->secondary_db或$this->xx_db),以免与主库的$this->db混淆。 - 资源释放:CodeIgniter通常在请求结束时自动关闭数据库连接,但在高并发场景下,手动调用
$this->xx_db->close();是好习惯。
以上就是CodeIgniter配置多数据库连接的详细内容,更多关于PHP多数据库操作的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













