3

ユーザー指定のデータベースに接続する必要があるプロジェクトがあります。適切な codeigniter のスタイルで実装したいのですが、codeigniter がデータベースの資格情報を database.php ファイルに保存する方法がわかりません。動的にする方法はありますか。または、これを達成するための他のアプローチはありますか?私はそれをグーグルで検索しましたが、役立つものは何も見つかりませんでした。どんな助けや提案もいただければ幸いです。

更新:
プロジェクトは報告に関するものです。データベースのログイン資格情報を取得し、データベースに関するレポートを生成するフォームがあり、すべてが実行時に行われます。

4

3 に答える 3

9

ガイドによると、次の 3 番目のパラメーターを介してデータベース接続設定を手動で渡すことができます$this->load->model

$config['hostname'] = "localhost";
$config['username'] = "myusername";
$config['password'] = "mypassword";
$config['database'] = "mydatabase";
$config['dbdriver'] = "mysql";
$config['dbprefix'] = "";
$config['pconnect'] = FALSE;
$config['db_debug'] = TRUE;

$this->load->model('Model_name', '', $config);
// or as gorelative notes, to access multiple databases:
$DB2 = $this->load->database($config, TRUE);
于 2012-07-24T01:52:50.057 に答える
3

最初に警告の言葉

ユーザーが許可するデータベース名を制限するか、ユーザーが自分で選択できないようにしない限り、これはおそらく推奨される最良のアイデアではないことに注意してください。

最初のシナリオが必須の場合は、データをサニタイズしてください。データベース名の定義済みリストがわかっている場合は、リストを提供し、リストに対して検証を行ってください。

そうは言っても:

これがあなたの記述されたコードです。これはコントローラーで行います。そして$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

于 2012-07-24T01:56:26.120 に答える