之前有發表([PHP] PHP for Oracle教學),但還是會看不太懂,我補充一些比較基本的資訊,並用範例來解釋:
如何確認環境設定是否支援
- 建立一個網頁,例如phpinfo.php,source code如下:
<?php echo phpinfo(); ?>
- 瀏覽器開啟phpinfo.php,搜尋『oci』。
- 若找到oci8代表環境支援。
啟用方式
之前範例的OS是windows+xampp,若是Ubuntu,安裝步驟如下:
安裝Oracle Instant Client 和 SDK
STEP 1
依Server的OS下載 Oracle Instant Client 和 SDK 。下載點: Oracle官網
STEP 2
建立資料夾
mkdir /opt/oracle
將剛剛下載的壓縮檔(zip)複製至此資料夾
STEP 3
解壓縮此檔
cd /opt/oracle unzip instantclient-basic-linux-12.1.0.2.0.zip unzip instantclient-sdk-linux-12.1.0.2.0.zip
STEP 4
建立symlink
ln -s /opt/oracle/instantclient_12_1/libclntsh.so.12.1 /opt/oracle/instantclient_12_1/libclntsh.so ln -s /opt/oracle/instantclient_12_1/libocci.so.12.1 /opt/oracle/instantclient_12_1/libocci.so
STEP 5
將資料夾增加到主機的 ldconfig.
echo /opt/oracle/instantclient_12_1 > /etc/ld.so.conf.d/oracle-instantclient
STEP 6
更新Dynamic Linker Run-Time Bindings
ldconfig
安裝額外的Packages
STEP 1
安裝下述packages
apt-get install php-pear php5-dev build-essential libaio1
STEP 2
下載並安裝OCI8
pecl install oci8-2.0.10
當安裝提示需輸入 Client location時, 輸入下述:
instantclient,/opt/oracle/instantclient_12_1
STEP 3
設定PHP load OCI8模組
echo "extension = oci8.so" >> /etc/php5/fpm/php.ini echo "extension = oci8.so" >> /etc/php5/cli/php.ini
STEP 4
Restart PHP 和 nginx
service php5-fpm restart service nginx restart
可以測試Oracle連線。
程式範例
PHP範例說明(這裏的OCI函數需在PHP5以上,PECL OCI8 至少1.1.0版本):
<?php $oracleuser="user"; //連線到oracle的帳號 $oraclepw="password"; //連線到oracle的密碼 $oraclelink="(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL=TCP)(HOST = abc.test.com.tw)(PORT = 1521)))(CONNECT_DATA = (SID = sid)))"; //Oracle主機的連線設定 $oracleconn = oci_pconnect($oracleuser, $oraclepw, $oracledata,"utf8"); //連線到Oracle,在此設定語系:utf8 if (!$oracleconn) { $e = oci_error(); trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR); } //若連線失敗,顯示錯誤訊息(可以不用加入這段IF) $query = "select id, name, address, tel from emp_info"; //搜尋資料的query $statement = oci_parse($oracleconn, $query); //預備執行query的statement 設定 oci_execute($statement); //執行statement while ($row = oci_fetch_row($statement)) { echo $row[0]."-"."$row[1]"."-"."$row[2]"."-"."$row[3]"." "; } unset($row); //清除array oci_free_statement($statement); //清除statement oci_close($oracleconn); //關閉Oracel連線(很重要,不然會一直佔用Session) ?>
產生結果如下:
1-王小明-台北市某某路某某號4樓-(02)2345-6789
2-李小華-台北市某某某路某號2樓-(02)2987-6543
3-陳小文-新北市某某路某某號6樓-(02)2357-2468
…