【发布时间】:2015-03-16 16:22:16
【问题描述】:
我有 codeigniter 设置来连接到 2 个数据库(默认和站点)。我需要动态更改默认数据库名称,任何使用默认连接的东西也应该使用新数据库。有没有办法做到这一点?
这样做的原因是我想设置一个在某些数据库上运行命令的 cron 脚本。我需要能够动态更改它,并且无法编辑 application/config/database.php。
$active_group = 'default';
$active_record = TRUE;
$phppos_client_name = substr($_SERVER['HTTP_HOST'], 0, strpos($_SERVER['HTTP_HOST'], '.'));
$db['site']['hostname'] = 'php-pos-db';
$db['site']['username'] = 'phppoint';
$db['site']['password'] = 'password';
$db['site']['database'] = 'phppoint_site';
$db['site']['dbdriver'] = 'mysql';
$db['site']['dbprefix'] = '';
$db['site']['pconnect'] = FALSE;
$db['site']['db_debug'] = FALSE;
$db['site']['cache_on'] = FALSE;
$db['site']['cachedir'] = '';
$db['site']['char_set'] = 'utf8';
$db['site']['dbcollat'] = 'utf8_general_ci';
$db['site']['swap_pre'] = '';
$db['site']['autoinit'] = TRUE;
$db['site']['stricton'] = FALSE;
$db['default']['hostname'] = "php-pos-db";
$db['default']['username'] = "phppoint";
$db['default']['password'] = "password";
$db['default']['database'] = "phppoint_$phppos_client_name";
$db['default']['dbdriver'] = "mysql";
$db['default']['dbprefix'] = "phppos_";
$db['default']['pconnect'] = FALSE;
$db['default']['db_debug'] = FALSE;
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = '';
$db['default']['char_set'] = 'utf8';
$db['default']['dbcollat'] = 'utf8_unicode_ci';
$db['default']['swap_pre'] = '';
$db['default']['autoinit'] = TRUE;
$db['default']['stricton'] = FALSE;
/* End of file database.php */
/* Location: ./application/config/database.php */
【问题讨论】:
-
$this->load->database('site') -
将 `$this->load->database('DB_NAME') 允许程序中的所有数据库查询使用该数据库进行其余的执行吗?真的这么简单吗?
-
DB_NAME并不表示数据库名称。它是数据库配置中的变量名称。这里是default或site -
所以如果我将配置添加到文件中;它会工作吗?如果我有 100 个,这会导致任何性能问题吗?
-
如果你希望所有运行时查询都使用这个数据库,那么你可以在
MY_controller的构造函数中加载它。如果您希望系统使用它,那么您需要创建一个hook
标签: php mysql codeigniter