簡體   English   中英

如何在Codeigniter中連接用戶指定的數據庫

[英]How to connect with user specified database in codeigniter

我有一個項目,我必須與用戶指定的數據庫連接。 我想以適當的codeigniter樣式實現它,但我不知道該怎么做才能將codeigniter將數據庫憑據存儲在database.php文件中,因此可以通過任何方式使其動態化。 還是有其他方法可以實現這一目標? 我已經用谷歌搜索過,但沒有發現任何幫助。 任何幫助和建議,將不勝感激。

更新:
該項目是關於報告的。 我有一個表單,在該表單中,我獲取了數據庫登錄憑據,然后生成有關其數據庫的報告,所有這些都將在運行時完成。

根據指南 ,您可以通過$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);

我知道這是一個古老的話題,但是我一直在尋找這些信息,並相信其他人也可能需要。

如果只需要在同一連接上使用其他數據庫,則無需創建單獨的數據庫配置。 您可以根據需要切換到其他數據庫,如下所示:

$this->db->db_select($database2_name)

這解決了我。

首先警告

應該注意的是,這可能不是一個最佳建議,除非您限制用戶允許的數據庫名稱或不允許他們自己選擇數據庫名稱。

如果必須使用第一種情況,請清理數據,如果您知道該數據已定義的數據庫名稱列表,請為其提供一個列表並針對該列表進行驗證。

話雖如此:

這是您描述的代碼。 我在控制器中執行此操作。 並在我的模型中引用$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”更改為您要連接的特定組名(或者您可以按上面的指示傳遞連接值)。

通過將第二個參數設置為TRUE(布爾值),該函數將返回數據庫對象。

通過這種方式進行連接時,將使用對象名來發出命令,而不是使用本指南中使用的語法。 換句話說,而不是使用以下命令發出命令:

 $this->db->query(); $this->db->result(); etc... 

您將改為使用:

 $DB1->query(); $DB1->result(); etc... 

實時工作代碼示例。

我使用此完全相同的功能添加了控制器/模型的片段。 我需要跨多個數據庫使用相同的憑據/配置連接到多個數據庫..結果,我能夠使用$this->db->來獲取配置。

您可以在這里查看其要點: https : //gist.github.com/08a4f45da1ff7e177425

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM