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