在Codeigniter

时间:2015-05-18 20:40:43

标签: php database codeigniter config

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

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"
}

有没有办法可以访问原始的db配置项而无需再次读取实际的配置文件?

1 个答案:

答案 0 :(得分:0)

如果将load函数的第二个参数设置为TRUE,它将返回一个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)