簡體   English   中英

我們能否在運行時根據codeigniter中的用戶登錄連接到數據庫?

[英]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.

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