CodeIgniter連接數據庫
1 兩種連接數據庫的方法:自動連接和手動連接
1)自動連接
作用:自動連接功能將在每一個頁面加載時被自動實例化數據庫類。
啓用方法:在application/cnfig/autoload.pho中的library數組裏添加database
$autoload['libraries'] = array('database');
2)手動連接
何時啓用:僅僅在一部分頁面要求數據庫連接時使用
啓用方法:在有需要的函數裏收購添加如下的代碼或者在類裏手工添加以供類使用
$this->load->database();
2 函數database()
this->load->database($v1,$v2,$v3);
1)如果該函數的第一個參數沒有任何信息,它將會在系統指定的數據庫配置文件中尋找,對大多數人而言,這是一個首選的方法。
2)$v1:數據庫連接值,用於數組或DSN字符串傳遞
3)$v2:TRUE/FALSE(boolean)是否返回連接ID
4)$v3:TRUE/FALSE(boolean)是否啓用Active Record類。默認值是TRUE。
3 手動連接到一個數據庫
**手動連接數據庫有兩種方式: 一、從配置文件中自由的指定你自定義的詳細的數據庫配置信息 二、用 DSN 字符串連接**
一、從配置文件中自由的指定你自定義的詳細的數據庫配置信息
1)database()函數的第一參數能從配置文件中自由的指定你子定義的詳細的數據庫配置信息。或者你甚至可以不通過指定的配置文件來提交數據庫的連接屬性。
示例:$this->load->database('groupname');其中groupname指的是存在於你額配置文件中的帶有數據庫連接信息的數據庫配置信息的數組的名字
2)手動連接數據庫配置信息數組: application\config\database.php文件中
$config['hostname'] = "localhost"; $config['username'] = "myusername"; $config['password'] = "mypassword"; $config['database'] = "mydatabase"; $config['dbdriver'] = "mysql; $config['dbprefix'] = ''"; $config['pconnect'] = FALSE; $config['db_debug'] = TRUE; $config['cache_on'] = FALSE; $config['cachedir'] = ""; $cofig['char_set'] = "utf8"; $config['dbcollat'] = "utf8-general_ci";
$this->load->database($config);
更多的配置屬性詳見:http://codeigniter.org.cn/user_guide/database/configuration.html
二、用 DSN 字符串連接
當使用DSN字符連接時要覆蓋配置默認值,則添加配置變量爲查詢字符串。
$dsn = 'dbdriver://username:password@hostname/database?charset=utf8=utf8general-ci&cache_on=true&cachedir=/path/to/cache'; $this->load->database($dsn);
注意:當你的dbdriver值爲mysq來進行遠程連接時要指定一個參數Port來爲遠程mysql端口
4 連接多個數據庫
如果需要同時連接多於一個的數據庫,可以使用下面的方式實現:
$DB1 = $this->load->database('group_one',TRUE); $DB2 = $this->load->database('group_two',TRUE);
注意4點:
1)改變"groupone"和"grouptwo"爲你自定的連接屬性的組名(或者通過上邊說過的連接數組的數組名)。
2)通過設置函數的第二個參數爲TRUE(boolean)來返回一個數據庫對象
3)當你使用這種方法,你將用對象名來執行操作命令而不是通過用戶想到模式,也是說,你將使用以下方式執行數據庫操作: $DB1->query(); $DB1->result(); etc...
而不是: $this->db->query(); $this->db->result(); etc...
4)要連接多個數據庫請先設置config/database.php中的$db['xxxxx']['pconnect'] = FALSE;這是mysql_pconnect()造成的問題,和CI無關
5 重新連接/保持連接有效
當你正在進行一些重量級的PHP操作(例如處理圖片)時,如果超出了數據庫服務器的空閒超時限度,應該考慮在執行更多查詢之前使用reconnect()方法來向服務器發送ping命令,這樣可以優雅地保持或重新建立連接
$this->db->reconnect();
6 手動關閉連接
雖然CodeIgniter可以智能的管理並自動關閉數據庫連接,任可以使用下面的方式顯式的關閉掉
$this->db->close();