1. 程式人生 > >mac安裝oci8擴充套件(orache擴充套件)+連線oracle資料庫並使用

mac安裝oci8擴充套件(orache擴充套件)+連線oracle資料庫並使用

一、安裝oracle客戶端

instantclient-basic-macos.x64-12.2.0.1.0-2.zip、
instantclient-sdk-macos.x64-12.2.0.1.0-2.zip 、
instantclient-sqlplus-macos.x64-12.2.0.1.0-2.zip(這個是用來獨立連線資料庫,可以不下載)

下載後把這三個包裡的內容都解壓放到一個目錄下,假設是/usr/local/instantclient,然後建立幾個符號連結,之後的編譯和最後生成的oci8.so檔案會用到:

ln -s /usr/local/instantclient/libclntsh.dylib.12.1 /usr/local/instantclient/libclntsh.dylib

ln -s /usr/local/instantclient/libclntsh.dylib.12.1 /usr/local/lib/

ln -s /usr/local/instantclient/libnnz12.dylib /usr/local/lib/

ln -s /usr/local/instantclient/libocci.dylib.12.1 /usr/local/lib/

ln -s /usr/local/instantclient/libociei.dylib /usr/local/lib/

注意:其中第一個符號連結如果不建立,編譯的時候會出錯。中間兩個符號連結如果不建立,oci8.so會載入失敗,提示找不到對應的dylib檔案。後面兩個符號連結如果不建立,今後在執行PHP的過程中oci_connect()函式會拋異常。如果今後依然遇到其他失敗的資訊,則以此類推,將instantclient目錄下的dylib檔案都在/usr/local/lib下建立符號連結即可。如果想簡單粗暴一些,那也可以把instantclient下的dylib檔案都拷貝到/usr/local/lib下

二、pecl快捷安裝oci8

sudo pecl install oci8


在提示輸入instantclient目錄位置的地方,輸入instantclient,/usr/local/instantclient


根據提示,在/usr/local/etc/php/7.1/conf.d/目錄下手工建一個ext-oci8.ini檔案。如果沒有conf.d這個資料夾則手動建立

cd /usr/local/etc/php/7.1

mkdir -p conf.d

cd conf.d

cat > ext-oci8.ini
[oci8]
extension="/usr/local/Cellar/php71/7.1.13_24/lib/php/extensions/debug-non-zts-20160303/oci8.so"
然後在php7.1的配置檔案php.ini(/usr/local/etc/php/7.1/php.ini)裡面新增擴充套件
extension=oci8.so;
然後,php -m 能看到oci擴充套件,但是<? echo phpinfo(); ?>  還是看不到,通過php-fpm.restart重啟php-fpm就可以了,因為我之前brew安裝了php7.0,後來brew又安裝php7.1的。之前安裝php7.0在~/.bash_aliases裡配置的php-fpm的start、stop、restart是針對php7.0的,現在要給php7.1的也新增一個php-fpm的3種命令切換
vim ~/.bash_aliases


#讓快捷命令生效
echo "[[ -f ~/.bash_aliases ]] && . ~/.bash_aliases" >> ~/.bash_profile     
source ~/.bash_profile
然後再到phpinfo對應頁面裡,就可以看到oci8擴充套件了



三、連線oracle資料庫並使用

$conn = oci_connect('賬號', '密碼', "(DEscriptION=(ADDRESS=(PROTOCOL =TCP)(HOST=連線oracle的ip地址)(PORT = 埠號))(CONNECT_DATA =(SID=HCMPRD2)))", "utf8");

$query = oci_parse($conn, "select * from TEST.ABC");//TEST資料庫的ABC表
oci_execute($query);
oci_fetch_all($query, $list, null, null, OCI_FETCHSTATEMENT_BY_ROW);
var_dump($list);
https://segmentfault.com/a/1190000008224468

http://blog.sina.com.cn/s/blog_6d85b84b0102wwhr.html

http://blog.csdn.net/qq_15574035/article/details/76619751