[英]Can we connect to database at runtime depending on user login in codeigniter?
我正在研究項目,我想根據用戶登錄名在運行時連接到數據庫。當我現在開始我的項目時,我想嘗試代碼點火器框架。但是經過研究,我發現很難說這是可能的。否則我有在標准php中執行相同操作的代碼。 但是我想在嘗試這種方法之前先嘗試一下框架。 我有多個(2個數據庫)連接的代碼。
$db['default']['hostname'] = 'localhost';
$db['default']['username'] = 'root';
$db['default']['password'] = '';
$db['default']['database'] = 'test1';
$db['default']['dbdriver'] = 'mysql';
$db['default']['dbprefix'] = '';
$db['default']['pconnect'] = TRUE;
$db['default']['db_debug'] = TRUE;
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = '';
$db['default']['char_set'] = 'utf8';
$db['default']['dbcollat'] = 'utf8_general_ci';
$db['default']['swap_pre'] = '';
$db['default']['autoinit'] = TRUE;
$db['default']['stricton'] = FALSE;
//Another database connection.
$db['db2']['hostname'] = 'localhost';
$db['db2']['username'] = 'root';
$db['db2']['password'] = '';
$db['db2']['database'] = 'test2';
$db['db2']['dbdriver'] = 'mysql';
$db['db2']['dbprefix'] = '';
$db['db2']['pconnect'] = FALSE;
$db['db2']['db_debug'] = TRUE;
$db['db2']['cache_on'] = FALSE;
$db['db2']['cachedir'] = '';
$db['db2']['char_set'] = 'utf8';
$db['db2']['dbcollat'] = 'utf8_general_ci';
$db['db2']['swap_pre'] = '';
$db['db2']['autoinit'] = TRUE;
$db['db2']['stricton'] = FALSE;
從文檔
要手動連接到所需的數據庫,您可以傳遞一個值數組:
$config['hostname'] = 'localhost';
$config['username'] = 'myusername';
$config['password'] = 'mypassword';
$config['database'] = 'mydatabase';
$config['dbdriver'] = 'mysqli';
$config['dbprefix'] = '';
$config['pconnect'] = FALSE;
$config['db_debug'] = TRUE;
$config['cache_on'] = FALSE;
$config['cachedir'] = '';
$config['char_set'] = 'utf8';
$config['dbcollat'] = 'utf8_general_ci';
$this->load->database($config);
使用以下語句在run
時在codeigniter
選擇數據庫。
$this->db->db_select('database2_name');
如果要關閉當前連接,請使用
$this->db->close();//closes the current db connection
然后select
所需的database
。
https://www.codeigniter.com/user_guide/database/connecting.html
查看“手動連接到數據庫”部分,其中顯示
要從配置文件中選擇特定的組,可以執行以下操作:
$this->load->database('group_name');
因此,登錄后,您可以手動調用數據庫連接並進行查詢。 我希望這足夠了。
$ active_group變量使您可以選擇激活哪個連接組。 默認情況下,只有一個組(“默認”組)。
$active_group = 'default';
$active_record = TRUE;
$db['default']['hostname'] = 'localhost';
$db['default']['username'] = 'root';
$db['default']['password'] = '';
$db['default']['database'] = 'test1';
$db['default']['dbdriver'] = 'mysql';
$db['default']['dbprefix'] = '';
$db['default']['pconnect'] = TRUE;
$db['default']['db_debug'] = TRUE;
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = '';
$db['default']['char_set'] = 'utf8';
$db['default']['dbcollat'] = 'utf8_general_ci';
$db['default']['swap_pre'] = '';
$db['default']['autoinit'] = TRUE;
$db['default']['stricton'] = FALSE;
$ active_record變量使您可以確定是否加載活動記錄類。
是的,您可以在運行時在codeigniter中連接數據庫。 默認情況下,如果不指定數據庫名稱,它將采用默認數據庫
$db['default']['hostname'] = 'localhost';
如果您指定一個特定的名稱
$db['db2']['hostname'] = 'localhost';
像這樣$this->load->database('db2', TRUE);
我在我的項目之一中做了同樣的操作,可以創建一個Table(如果要動態),可以根據用戶登錄名在其中存儲所有數據庫名稱。
因此,在連接到Model中的數據庫時,首先需要從使用用戶登錄名創建的表中獲取數據庫名稱,您可以執行以下操作
$ dbname是您通過查詢默認數據庫發現的數據庫名稱。
$admin_db= $this->load->database($dbname, TRUE);
$q = $admin_db->get('Tablename');
@Pratima根據您對Yahia Bat的評論,您希望從某個表動態獲取數據庫的詳細信息,然后連接到數據庫。 為此,您應該使用數據庫中所需的詳細信息填充$ config或任何其他陣列,並進行相應連接。
$config['hostname'] = '<<value from database table>>';
$config['username'] = '<<value from database table>>';
$config['password'] = '<<value from database table>>';
$config['database'] = '<<value from database table>>';
$config['dbdriver'] = 'mysqli';
$config['dbprefix'] = '';
$config['pconnect'] = FALSE;
$config['db_debug'] = TRUE;
$config['cache_on'] = FALSE;
$config['cachedir'] = '';
$config['char_set'] = 'utf8';
$config['dbcollat'] = 'utf8_general_ci';
$this->load->database($config);
那應該解決問題
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.