2018年9月18日 星期二

Codeigniter使用OracleDB 備忘

1. 下載 Oracle Instant Client,建議下載32位元的貌似使用在Windows環境下的PHP的php_oci12c.dll是編譯在32位元的,當然自行下載source code編譯的就依照自己設定的為主。

※ 透過phpinfo()看所安裝的PHP是x86 or 64然後下載相對應的Oracle Client版本回來,不過通常是32位元的就是了。

2. 將下載回來的Oracle Client (建議:Instant Client Package - Basic )解壓縮後的路徑位址( N:\instantclientXX\ ) 新增到系統環境變數內,請記得重新開機以利生效。

3. 至php.ini將php_oci12c.dll前面的分號";"拿掉,然後重啟web server(ex. IIS or Apache)。

4. 在CI的config\database.php
$db['default'] = array(
'dsn' => '',
'hostname' => '(IP or DomainName)/(SID)',
'username' => 'account',
'password' => '******',
'database' => '',
'dbdriver' => 'oci8',
'dbprefix' => '',
'pconnect' => FALSE,
'db_debug' => (ENVIRONMENT !== 'production'),
'cache_on' => FALSE,
'cachedir' => '',
'char_set' => 'utf8',
'dbcollat' => 'utf8_general_ci',
'swap_pre' => '',
'encrypt' => FALSE,
'compress' => FALSE,
'stricton' => FALSE,
'failover' => array(),
'save_queries' => TRUE
);

5. 若依舊是顯示oci_connect() 未定義的錯誤,那麼就再下載含有Net Manager 的 Oracle Client。之前碰到Oracle Client裝64位元但:Instant Client裝x86,這樣PHP是沒法啟用oci8的套件。

備忘:
1. 改Oracle後table & column name都變大寫,好用的AI沒了得改sys_guid() ... 還有很多很多 =.=
2. CI在Sql Query會加雙引號,若使用Oracle須改system\db_driver.php 把雙引號拿掉。
3. CI2使用Oracle是悲劇的(ex. rownum()),後來直接改使用CI3就順多了。