連接你的數據庫
有兩種方法連接數據庫:
自動連接
“自動連接” 功能將在每個一頁面加載時被自動實例化數據庫類。要啟用“自動連接”,可在application/config/autoload.php中的 library 數組里添加 database:
$autoload['libraries'] = array('database');
手動連接
如果僅僅是一部分頁面要求數據庫連接,你可以在你有需要的函數里手工添加如下代碼或者在你的類里手工添加以供該類使用。
$this->load->database();
如果以上函數的第一個參數沒有任何信息,它將會在系統(tǒng)指定的數據庫配置文件中尋找,對多數人而言,這是一個首選的方法。
可用的參數
- 數據庫連接值,用數組或DSN字符串傳遞。
- TRUE/FALSE (boolean)。是否返回連接ID (參閱下面的“連接多數據庫”)。
- TRUE/FALSE (boolean)。是否啟用 Active Record 類。默認設置為 TRUE。
手動連接到一個數據庫
函數的第一個參數能夠從你的配置文件中自由的指定你自定義的詳細的數據庫配置信息?;蛘吣闵踔量梢圆煌ㄟ^指定的配置文件來提交數據庫的連接屬性。 樣例:
要從你的配置文件中選擇一個指定的數組你可以這么做:
$this->load->database('group_name');
group_name指的是存在于你的配置文件中的帶有數據庫連接信息的數組的名字。
要手動連接你要求的數據庫你可以通過定義以下數組來實現:
$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'] = "";
$config['char_set'] = "utf8";
$config['dbcollat'] = "utf8_general_ci";
$this->load->database($config);
想得到每一個配置屬性的詳細信息可點擊 這里.
或者你可以以DSN的方式提交數據庫配置信息。 DSN必然通過以下方式實現:
$dsn = 'dbdriver://username:password@hostname/database';
$this->load->database($dsn);
當用 DSN 字符串連接時,要覆蓋配置默認值,則添加配置變量為查詢字符串。
$dsn = 'dbdriver://username:password@hostname/database?char_set=utf8&dbcollat=utf8_general_ci&cache_on=true&cachedir=/path/to/cache';
$this->load->database($dsn);
連接多數據庫
如果你需要同時連接多于一個的數據庫,你可以用以下方式來實現:
$DB1 = $this->load->database('group_one', TRUE);
$DB2 = $this->load->database('group_two', TRUE);
注意:改變 "group_one" 和 "group_two" 為你指定了連接屬性的組名 (或者通過上邊說過的連接數組的數組名)。
通過設置函數的第二個參數為TRUE(boolean)來返回一個數據庫對象。
當你使用這種方法,你將用對象名來執(zhí)行操作命令而不是用戶向導模式,也就是說,你將用以下方式執(zhí)行數據庫操作:
$DB1->query();
$DB1->result();
etc...
而不是:
$this->db->query();
$this->db->result();
etc...
譯注:要連接多個數據庫請先設置 config/database.php 中的 $db['xxxxxx']['pconnect'] = FALSE; 這是 mysql_pconnect() 造成的問題,和 CI 無關。
重新連接 / 保持連接有效
當你正在進行一些重量級的PHP操作(例如處理圖片)時,如果超出了數據庫服務器的空閑超時限度,你應該考慮在執(zhí)行更多查詢之前使用reconnect()方法來向服務器發(fā)送ping命令,這樣可以優(yōu)雅地保持或重新建立連接。
$this->db->reconnect();
手動關閉連接
CI能很好的管理數據庫連接,用完以后應該把連接關掉
$this->db->close();
?