我需要连接到未在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是提前
答案 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}}不同的数据库会比连接它们更好。