最初に警告の言葉
ユーザーが許可するデータベース名を制限するか、ユーザーが自分で選択できないようにしない限り、これはおそらく推奨される最良のアイデアではないことに注意してください。
最初のシナリオが必須の場合は、データをサニタイズしてください。データベース名の定義済みリストがわかっている場合は、リストを提供し、リストに対して検証を行ってください。
そうは言っても:
これがあなたの記述されたコードです。これはコントローラーで行います。そして$db2->
、私のモデルを参照してください。
$config['hostname'] = "localhost";
$config['username'] = "myusername";
$config['password'] = "mypassword";
$config['database'] = $customUserDatabase;
$config['dbdriver'] = "mysql";
$config['dbprefix'] = "";
$config['pconnect'] = FALSE;
$config['db_debug'] = TRUE;
$DB2 = $this->load->database($config);
$q = $DB2->where('id', 13)->get('tablename');
if( $q->num_rows() > 0 ){
return $q->result();
}else{
return false;
}
http://codeigniter.com/user_guide/database/connecting.html
複数のデータベースへの接続に関する部分を参照してください...
複数のデータベースへの接続
複数のデータベースに同時に接続する必要がある場合は、次のように実行できます。
$DB1 = $this->load->database('group_one', TRUE); $DB2 = $this->load->database('group_two', TRUE);
注: 「group_one」および「group_two」という単語を、接続先の特定のグループ名に変更します (または、上記のように接続値を渡すことができます)。
2 番目のパラメーターを TRUE (ブール値) に設定すると、関数はデータベース オブジェクトを返します。
この方法で接続すると、このガイド全体で使用される構文ではなく、オブジェクト名を使用してコマンドを発行します。つまり、コマンドを発行するのではなく、次のようにします。
$this->db->query(); $this->db->result(); etc...
代わりに以下を使用します。
$DB1->query(); $DB1->result(); etc...
ライブワーキングコードの例。
これとまったく同じ機能を使用して、コントローラー/モデルのスニペットを配置しました。複数のデータベースで同じ資格情報/構成を使用して複数のデータベースに接続する必要がありました..その結果、$this->db->
構成を取得するために使用できました。
ここでその要点を見ることができます: https://gist.github.com/08a4f45da1ff7e177425