CodeIgniter动态更改默认数据库名称

时间:2015-03-16 16:22:17

标签: php mysql codeigniter

我有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 */

4 个答案:

答案 0 :(得分:1)

你想要的方式我觉得它不可能。你可以替代方式做到这一点。

1.请勿在自动加载配置中加载数据库   2.在执行查询之前,使用$this->load->database('site')$this->load->database('default')手动加载数据库。

答案 1 :(得分:0)

3种方法(虽然可能有很多种)

  1. 读取整个文件,将其另存为fileName.txt(具有更新的数据库名称)并将文件重命名为database.php

  2. 您将在何处存储数据库名称(如果它存储在文件中,请从文件中读取值并将其放在php中)?您必须通过在此文件中添加代码来使其变得混乱

  3. 如果将数据库名称保存到另一个数据库(该代码是静态的),请获取名称并保存到$ 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();
    }
}