CodeIgniter 使用PDO driver

CodeIgniter

在CodeIgniter 中可以設定Database 使用的Driver,修改資料庫連線的設定檔存放在:

application/config/database.php

裡頭有一個設定值是有關使用dbdriver的:

$db['default']['dbdriver'] = '';

而這支檔案的註解也寫到可以修改dbdriver 的值來設定不同資料庫連線型態,雖然註解中沒提到可以使用PDO,不過在syststem/database/drivers 內可以看到有哪些dbdriver 可以用

cubrid
index.html
mssql
mysql
mysqli
oci8
odbc
pdo
postgre
sqlite
sqlsr

接下來確定有PDO Driver可以用的話,就可以來修改application/config/database.php 的設定

$db['default']['hostname'] = 'mysql:host=localhost';
$db['default']['username'] = 'MY_DB_USERNAME';
$db['default']['password'] = 'MY_DB_PASSWORD';
$db['default']['database'] = 'MY_DB_NAME';
$db['default']['dbdriver'] = 'pdo';
$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'] = TRUE;

上面比較要注意的就是:

  1. $db[‘default’][‘hostname’] ,要指定資料來源名稱(Data Source Name)
  2. 要修改成自己的主機localhost 直接替換成主機名稱或IP 位址

至於$db[‘default’][‘database’] ,則直接設定資料庫名稱的字串。

為什麼不用寫成data source,去trace system/database/drivers/pdo/pdo_driver.php 會發現在__contruct() 有處理了,而db_connect() function 是連線到資料庫的

function __construct($params)
{
	parent::__construct($params);

	// ignore...

	empty($this->database) OR $this->hostname .= ';dbname='.$this->database;

	// ignore...
}
function db_connect()
{
	$this->options['PDO::ATTR_ERRMODE'] = PDO::ERRMODE_SILENT;

	return new PDO($this->hostname, $this->username, $this->password, $this->options);
}

以下是繼承自CI_DB 的變數:

  • $this->hostname 
  • $this->username
  • $this->password
  • $this->options

也就是system/database/DB_Driver.php,如果還想知道system/database/DB_Driver.php 中的class 如何被呼叫可以在去看system/database/DB.php

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料