我有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 */
答案 0 :(得分:1)
你想要的方式我觉得它不可能。你可以替代方式做到这一点。
1.请勿在自动加载配置中加载数据库
2.在执行查询之前,使用$this->load->database('site')
或$this->load->database('default')
手动加载数据库。
答案 1 :(得分:0)
3种方法(虽然可能有很多种)
读取整个文件,将其另存为fileName.txt(具有更新的数据库名称)并将文件重命名为database.php
您将在何处存储数据库名称(如果它存储在文件中,请从文件中读取值并将其放在php中)?您必须通过在此文件中添加代码来使其变得混乱
如果将数据库名称保存到另一个数据库(该代码是静态的),请获取名称并保存到$ var变量中并将其分配给配置。
答案 2 :(得分:0)
整个Code Igniter应用程序的db规范取决于配置规范,并且不能动态更改。它存在于系统内部,除非您使用文本编辑器对其进行修改,否则不允许对其进行修改。
我会通过输入:
动态地覆盖应用程序代码中的db名称$this->load->database('db1')
第二个动态捕获的包括:
$this->load->database('db2')
答案 3 :(得分:0)
class CronModel extends CI_Model
{
public function run()
{
// The default database configuration $db['default']
$query1 = $this->db->query();
// pass true as second param to use active record
// ie : $site->select()->get();
$site = $this->load->database('site', true);
// The site database configuration $db['site']
$query2 = $site->query();
}
}