CI框架中配置多数据库连接并执行跨库查询

林见深
林见深
发布时间:2026-10-15 | 4人浏览过
原创

在开发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 中提取数据,则说明配置成功。请注意以下几点以确保稳定性:

  1. 无需Model文件:对于这种临时性或低频使用的附加数据库,直接使用 $this->xx_db->query() 执行原生SQL是最简便的方式,不需要专门为该库创建对应的Model类。
  2. 命名冲突:建议将附加库的连接对象命名为具有区分度的名称(如 $this->secondary_db 或 $this->xx_db),以免与主库的 $this->db 混淆。
  3. 资源释放:CodeIgniter通常在请求结束时自动关闭数据库连接,但在高并发场景下,手动调用 $this->xx_db->close(); 是好习惯。

以上就是CodeIgniter配置多数据库连接的详细内容,更多关于PHP多数据库操作的资料请关注本站其它相关文章!

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表