Codeigniter动态更改为未定义的数据库

时间:2016-08-31 14:04:02

标签: codeigniter

我需要连接到未在database.php配置文件中定义的数据库。

尚未定义,因为有200多个可能的数据库。

我将遍历我的clients表以获取他们的客户端代码,以确定当前将使用哪个数据库。

我在循环中生成带有字符串的db名称,如下所示:

$db_name = "db_".$row['code'];

由此,我需要连接到一个新的数据库,它将遍历数据库的表格,以检查该数据库和主数据库是否同步。

我尝试了以下代码,但它似乎不起作用:

$this -> db -> database = $db_name;

我还尝试在配置中定义一个空白连接,如下所示:

$db['temp'] = $db['default'];
$db['temp']['database'] = "";

然后使用

更改为生成的数据库名称
$this -> db -> database = $db_name;

功能,但没有用。

我不确定这是否完全可能,但这是我能找到的关于如何切换数据库连接的全部内容。

如果您有任何其他建议,请告知我们。

Thanx是提前

1 个答案:

答案 0 :(得分:1)

switching中可能找到的CodeIgniter Documentation数据库可能是获取信息的唯一合理方式,而不会严重限制配置文件。所以假设:

$db_config = array(
    //Shared values
    'hostname' => '...',
    'dbdriver' => '...';
);

$all_results = array();

$getDatabases = $this->database_model->get_databases();
foreach( $getDatabases as $key => $row )
{
    $client_db = null;
    $db_forge  = null;

    $db_name   = "db_". $row['code'];

    //Use copy of shared DB Values.
    $active_config = $db_config;
    $active_config['database'] = $db_name;

    $client_db = $this->load->database( $active_config, TRUE );
    $db_forge  = $this->load->dbforge( $client_db, TRUE );

    $result = 
       $client_db->select( "*" )
                 ->get_where( "TB_EXAMPLE", array( "client_id" => '...' ))->row();

    //Example of reason to drop the table
    if ( !empty( $result ) && $result->INACTIVE == TRUE )
    {
         $db_forge->drop_table( "TB_EXAMPLE" );
    }

    //Now finished with this connection to this particular Database.
    $client_db->close();
    $all_results[] = $result;
}

然而,这是非常不明智的。它显然会连接到200个不同的数据库,密集且昂贵。如果它们都在同一台服务器上; <{1}}不同的数据库会比连接它们更好。