在 Codeigniter 中加载默认数据库

Load default database in Codeigniter

我在一些模型构造函数中使用辅助函数切换到用户数据库,如下所示:

public function __construct(){
    parent::__construct();

    $this->load->helper('general');
    switch_to_user_db();
}

我的 general_helper 这样做:

function switch_to_user_db($userID = NULL){
    $CI =& get_instance();

    $userID = ($userID !== NULL) ? $userID : $CI->user->ID;

    $dbParams = array(
        'hostname' => 'localhost',
        'username' => 'dbUserName',
        'password' => 'dbPassword',
        'database' => 'user_db_'.$userID,
        'dbdriver' => 'mysql'
    );

    $CI->load->database($dbParams, FALSE, TRUE);
}

当我使用另一个辅助函数完成用户数据库时,我希望能够切换回默认数据库,但我无法访问默认数据库配置项。

function switch_to_default_db(){
    $CI =& get_instance();

    $CI->load->database('default');
    echo $CI->db->database;      //Echoes e.g. "user_db_4"
}

有什么方法可以访问原始数据库配置项而无需再次读取实际配置文件?

如果您将加载函数的第二个参数设置为 TRUE,它将 return 具有所提供设置的 DB 对象的实例。

所以,而不是:

$CI->load->database('usrTable');

你可以这样做:

$newDb = $CI->load->database('usrTable',TRUE);

然后使用 $newDb 对象进行用户数据库查询,默认库仍将照常工作。

顺便说一句,你可以把配置放在 database.php 上,比如

$db['user']['hostname'] = 'host';
$db['user']['username'] = 'user';
$db['user']['password'] = 'pass';
$db['user']['database'] = 'db';

(和其他参数)

然后像

一样加载数据库
$userDb = $this->load->database('user', true); 

(或 $CI 如果您超出范围)