在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;
上面比較要注意的就是:
- $db[‘default’][‘hostname’] ,要指定資料來源名稱(Data Source Name)
- 要修改成自己的主機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
發佈留言