CodeIgniter 連接你的數(shù)據(jù)庫

2018-07-21 15:41 更新

連接你的數(shù)據(jù)庫

有兩種方法連接數(shù)據(jù)庫:

自動(dòng)連接

“自動(dòng)連接” 特性將在每一個(gè)頁面加載時(shí)自動(dòng)實(shí)例化數(shù)據(jù)庫類。要啟用“自動(dòng)連接”, 可在 application/config/autoload.php 中的 library 數(shù)組里添加 database:

$autoload['libraries'] = array('database');

手動(dòng)連接

如果你只有一部分頁面需要數(shù)據(jù)庫連接,你可以在那些有需要的函數(shù)里手工添加 如下代碼來連接數(shù)據(jù)庫,或者寫在類的構(gòu)造函數(shù)里,讓整個(gè)類都可以訪問:

$this->load->database();

如果 database() 函數(shù)沒有指定第一個(gè)參數(shù),它將使用數(shù)據(jù)庫配置文件中 指定的組連接數(shù)據(jù)庫。對大多數(shù)人而言,這是首選方案。

可用的參數(shù)

  1. 數(shù)據(jù)庫連接值,用數(shù)組或DSN字符串傳遞;
  2. TRUE/FALSE (boolean) - 是否返回連接ID(參考下文的“連接多數(shù)據(jù)庫”);
  3. TRUE/FALSE (boolean) - 是否啟用查詢構(gòu)造器類,默認(rèn)為 TRUE 。

手動(dòng)連接到數(shù)據(jù)庫

這個(gè)函數(shù)的第一個(gè)參數(shù)是可選的,被用來從你的配置文件中 指定一個(gè)特定的數(shù)據(jù)庫組,甚至可以使用沒有在配置文件中定義的 數(shù)據(jù)庫連接值。下面是例子:

從你的配置文件中選擇一個(gè)特定分組:

$this->load->database('group_name');

其中 group_name 是你的配置文件中連接組的名字。

連接一個(gè)完全手動(dòng)指定的數(shù)據(jù)庫,可以傳一個(gè)數(shù)組參數(shù):

$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);

這些值的詳細(xì)信息請參考 :doc: 數(shù)據(jù)庫配置  頁面。

注解

對于 PDO 驅(qū)動(dòng),你應(yīng)該使用 $config['dsn'] 取代 'hostname' 和 'database' 參數(shù):

$config['dsn'] = 'mysql:host=localhost;dbname=mydatabase';

或者你可以使用數(shù)據(jù)源名稱(DSN,Data Source Name)作為參數(shù),DSN 的格式必須類似于下面這樣:

$dsn = 'dbdriver://username:password@hostname/database';
$this->load->database($dsn);

當(dāng)用 DSN 字符串連接時(shí),要覆蓋默認(rèn)配置,可以像添加查詢字符串一樣添加配置變量。

$dsn = 'dbdriver://username:password@hostname/database?char_set=utf8&dbcollat=utf8_general_ci&cache_on=true&cachedir=/path/to/cache';
$this->load->database($dsn);

連接到多個(gè)數(shù)據(jù)庫

如果你需要同時(shí)連接到多個(gè)不同的數(shù)據(jù)庫,可以這樣:

$DB1 = $this->load->database('group_one', TRUE);
$DB2 = $this->load->database('group_two', TRUE);

注意:將 "group_one" 和 "group_two" 修改為你要連接的組名稱 (或者像上面介紹的那樣傳入連接值數(shù)組)

第二個(gè)參數(shù) TRUE 表示函數(shù)將返回?cái)?shù)據(jù)庫對象。

注解

當(dāng)你使用這種方式連接數(shù)據(jù)庫時(shí),你將通過你的對象名來執(zhí)行數(shù)據(jù)庫命令, 而不再是通過這份指南中通篇介紹的,就像下面這樣的語法了:

$this->db->query();

$this->db->result();

etc...

取而代之的,你將這樣執(zhí)行數(shù)據(jù)庫命令:

$DB1->query();

$DB1->result();

etc...

注解

如果你只是需要切換到同一個(gè)連接的另一個(gè)不同的數(shù)據(jù)庫,你沒必要?jiǎng)?chuàng)建 獨(dú)立的數(shù)據(jù)庫配置,你可以像下面這樣切換到另一個(gè)數(shù)據(jù)庫:

$this->db->db_select($database2_name);

## 重新連接 / 保持連接有效

當(dāng)你在處理一些重量級的 PHP 操作時(shí)(例如處理圖片),如果超過了數(shù)據(jù)庫的超時(shí)值, 你應(yīng)該考慮在執(zhí)行后續(xù)查詢之前先調(diào)用 reconnect() 方法向數(shù)據(jù)庫發(fā)送 ping 命令, 這樣可以優(yōu)雅的保持連接有效或者重新建立起連接。

$this->db->reconnect();


## 手動(dòng)關(guān)閉連接

雖然 CodeIgniter 可以智能的管理并自動(dòng)關(guān)閉數(shù)據(jù)庫連接,你仍可以用下面的方法顯式的關(guān)閉連接:

$this->db->close();

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號