2016-08-31 8 views
1

database.php設定ファイルで定義されていないDBに接続する必要があります。Codeigniterが未定義のデータベースに動的に変更します

可能なデータベースが200を超えるため、定義されていません。

クライアントテーブルをループして、現在使用されているデータベースを決定するクライアントコードを取得します。

は、私はこのようなループ内の文字列でDB名を生成します。このことから

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

、私は、DBのテーブルをループがこのDBかどうかをチェックするためにする新しいDBに接続する必要がありますマスターDBは同期しています。

私は、次のコードを試してみましたが、動作していないよう:

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

と私はまた、このような設定で空白の接続を定義しようとしました:

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

、その後変更

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

機能で生成されたDB名に機能しましたが機能しませんでした。

これがすべて可能かどうかはわかりませんが、これはDB接続を切り替える方法のすべてです。

代替提案がある場合は、お知らせください。

ありがとうあなたがCodeIgniter Documentationで見つかったかもしれないデータベースのswitchingは、おそらく大きく設定ファイルを膨満感なしに情報を取得するだけで、賢明な方法です事前

答えて

1

です。したがって、仮説的に言えば、

$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の異なるデータベースに接続します。それらがすべて同じサーバー上にある場合。別のデータベースによってSELECTに接続するよりも、接続する方が良いでしょう。

+0

Thanx!この関数が行うことは、テーブルとそのフィールドをループして、テーブルが最新であることを確認することです。だから私は一度に1つのDBにしか接続されませんが、手動で各DBに接続する方法はありませんので、ループ内でこれを実行したいのです –

+0

これは実際には完全に機能しましたが、 '$ client_db - > dbforge - > drop_table()'と '$ client_db - > drop_table()'は動作していないようです。 –

+0

'dbforge'ライブラリを別途ロードする必要があります。それはドキュメントに示唆されているように見える 'load-> database'です。それから '$ this-> dbforge-> drop_table( 'name');' - 答えで編集します:) – MackieeE

関連する問題