Codeigniter - 如何动态更新数据库配置设置?

时间:2012-10-24 11:28:31

标签: php codeigniter config

我想为我的程序的一部分更改一些数据库设置。

在我的设置中,数据库类是使用类似

的配置自动加载的
$db['default']['hostname'] = 'localhost';
$db['default']['username'] = 'root';
$db['default']['password'] = '****';
$db['default']['database'] = 'database';
$db['default']['dbdriver'] = 'mysql';
$db['default']['dbprefix'] = '';
$db['default']['pconnect'] = TRUE;
$db['default']['db_debug'] = TRUE;
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = '';
$db['default']['char_set'] = 'utf8';
$db['default']['dbcollat'] = 'utf8_general_ci';
$db['default']['swap_pre'] = '';
$db['default']['autoinit'] = TRUE;
$db['default']['stricton'] = FALSE;

在脚本的一部分我想更改$db['default']['keyname']的值,我该怎么做?

4 个答案:

答案 0 :(得分:2)

有怎样的课程>检查http://codeigniter.com/user_guide/libraries/config.html

你怎么也不能改变数据库连接设置....它们在你的配置之前就已经加载了..

答案 1 :(得分:2)

您应该添加另一组凭据,而不是动态更改现有凭据:

$db['another_db']['hostname'] = 'localhost';
$db['another_db']['username'] = 'root';
$db['another_db']['password'] = '****';
$db['another_db']['database'] = 'database';
$db['another_db']['dbdriver'] = 'mysql';
$db['another_db']['dbprefix'] = '';
$db['another_db']['pconnect'] = TRUE;
$db['another_db']['db_debug'] = TRUE;
$db['another_db']['cache_on'] = FALSE;
$db['another_db']['cachedir'] = '';
$db['another_db']['char_set'] = 'utf8';
$db['another_db']['dbcollat'] = 'utf8_general_ci';
$db['another_db']['swap_pre'] = '';
$db['another_db']['autoinit'] = TRUE;
$db['another_db']['stricton'] = FALSE;

您可以通过执行以下操作加载此其他数据库:

$another_db = $this->load->database('another_db', TRUE);

然后像普通数据库驱动程序一样使用它:

$another_db->select();
...etc

答案 2 :(得分:0)

稍微hacky,但你可以添加这样的东西到system / database / DB_driver.php(我用db密码更改作为例子): -

public function update_pw($value) {
  $this->password = $value;
}

然后在你的项目中,做

$this->db->update_pw('example');
$this->db->reconnect();

具体取决于您要在配置中更改的内容 - 更重要的是,为什么要更改它 - 这可能是也可能不是最佳选择。

答案 3 :(得分:0)

此外,您始终可以使用Global var。通常我总是有2个数据库。一个用于生产,一个用于开发。您只需检查var以加载其中一个。

该概念可用于在应用程序的一个部分中加载一个数据库,在其他部分中加载其他部分。但是,我会像Brendan所指出的那样内置解决方案。