PHP使用PDO訪問oracle數(shù)據(jù)庫的步驟詳解
前言
PDO 從一開始就吸取了現(xiàn)有數(shù)據(jù)庫擴(kuò)展成功和失敗的經(jīng)驗(yàn)教訓(xùn)。因?yàn)?PDO 的代碼是全新的,所以我們有機(jī)會重新開始設(shè)計性能,以利用 PHP 5 的最新特性。
PDO 旨在將常見的數(shù)據(jù)庫功能作為基礎(chǔ)提供,同時提供對于 RDBMS 獨(dú)特功能的方便訪問。
雖然LAMP中PHP和Mysql是標(biāo)準(zhǔn)配對,但是公司的項目是Mysql和Oracle分別作為運(yùn)行庫和詳單庫的,所以PHP連接oracle數(shù)據(jù)庫也是必須要實(shí)現(xiàn)的。本篇文章就介紹下如果通過PDO連接到oracle數(shù)據(jù)庫,下面話不多說了,來一起看看詳細(xì)的介紹吧。
開發(fā)環(huán)境
同樣先說明下我使用到的環(huán)境:
- RedHat(CentOS)6.7
- PHP5.6
- Oracle11g
php5.6的搭建可以參照這里;
Oracle在linux環(huán)境下的安裝可以參考這里
當(dāng)然,你也可以不安裝整個oracle,而只安裝instant client來實(shí)現(xiàn);如果是instant client的oracle連接步驟參見本篇博文最后的致謝部分。
在開始下面的步驟前,請務(wù)必確保以上的3個環(huán)境都正確配置可用。
安裝PDO_OCI
如果你是安裝的php5.6.31版本,似乎pdo_oci模塊已經(jīng)自帶了;但是穩(wěn)妥起見,我們重新安裝一遍。
下載并解壓縮
$ wget https://pecl.php.net/get/PDO_OCI-1.0.tgz $ tar -xvf PDO_OCI-1.0.tgz $ cd PDO_OCI-1.0
修改配置文件
更新目錄中的config.m4文件,使其適配Oracle11g
# 在第10行左右找到與下面類似的代碼,添加這兩行: elif test -f $PDO_OCI_DIR/lib/libclntsh.$SHLIB_SUFFIX_NAME.11.2; then PDO_OCI_VERSION=11.2 # 在第101行左右添加這幾行: 11.2) PHP_ADD_LIBRARY(clntsh, 1, PDO_OCI_SHARED_LIBADD) ;;
編譯
在當(dāng)前目錄下執(zhí)行
$ phpize
phpize類似于gcc命令,主要是用來生成php的外掛模塊。phpize是依賴于php-deval模塊的,如果命令無法執(zhí)行,請自行利用yum安裝php-deval;
你可以通過下面的命令檢查下是否已經(jīng)安裝:
$ rpm -qa | grep php
查看是否有php56w-deval-5.6.xxx,如果沒有,請yum install php56w-deval來安裝。
安裝
phpize命令執(zhí)行之后,會在目錄下生成很多文件,其中包括configure等我們常見的linux下通過源碼安裝應(yīng)用的標(biāo)準(zhǔn)文件,依次執(zhí)行下面的命令:
$ ./configure $ make && make install
這里一般會遇到一個問題,在make的時候會提示在pdo_oci.c文件中:
pdo_oci.c:34: error: expected ‘=', ‘,', ‘;', ‘a(chǎn)sm' or ‘a(chǎn)ttribute' before ‘pdo_oci_functions'
解決辦法是修改pdo_oci.c文件的第34行,把function_entry修改成zend_function_entry,保存后重新make就可以了。
創(chuàng)建ini文件
成功之后,會提示已經(jīng)在/usr/lib64/php/modules目錄下生成了pdo_oci.so模塊,我們要做的就是告訴php,我們要引用這個模塊。
在/etc/php.d目錄下新建一個ini文件:pdo_oci.ini,內(nèi)容:
extension=pdo_oci.so
到這里,pdo_oci模塊就安裝完成了,我們可以通過php -m | grep oci來查看。
安裝OCI8
接下來就是安裝oci8模塊。
下載并解壓縮
依次在命令行中執(zhí)行下面的命令:
$ wget https://pecl.php.net/get/oci8-2.0.8.tgz $ tar -xvf oci8-2.0.8.tgz $ cd oci8-2.0.8
編譯和安裝
步驟和上面pdo_oci是類似的:
$ phpize $ ./configure --with-oci8=shared $ make && make install
創(chuàng)建ini文件
同樣的,我們在/etc/php.d目錄下創(chuàng)建oci8.ini,內(nèi)容:
extension=oci8.so
重啟Apache
別忘記重啟一下apache服務(wù)器來重新加載php的模塊:
$ service httpd restart
我們可以通過在網(wǎng)站目錄下創(chuàng)建一個test.php文件,文件中的內(nèi)容是:
<?php phpinfo();
然后我們到頁面中去查看下打印出來的phpinfo信息,查看其中的pdo, pdo_oci和oci8模塊的相關(guān)信息。
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
參考&致謝
php5.3連接oracle的客戶端及pdo_oci模塊安裝
Installing PDO_OCI and OCI8 PHP extensions on CentOS 6.4 64bit
相關(guān)文章
php中header設(shè)置常見文件類型的content-type
這篇文章主要介紹了php中header設(shè)置常見文件類型的content-type的相關(guān)資料,需要的朋友可以參考下2015-06-06php下把數(shù)組保存為文件格式的實(shí)例應(yīng)用
我們通常把一些常用的數(shù)據(jù)保存為數(shù)組格式方便調(diào)用,同時這也是緩存的重要方法。2010-02-02PHP數(shù)組無限分級數(shù)據(jù)的層級化處理代碼
在很多朋友寫無限級分類數(shù)據(jù)時都直接使用遞歸來操作,下面我來介紹一下關(guān)于PHP無限分級代碼優(yōu)化方法,有需要的朋友可參考一下2012-12-12PHP超級全局變量、魔術(shù)變量和魔術(shù)函數(shù)匯總整理
這篇文章主要介紹了PHP超級全局變量、魔術(shù)變量和魔術(shù)函數(shù)匯總整理,有需要的同學(xué)可以看下2021-02-02PHP設(shè)計模式之 策略模式Strategy詳解【對象行為型】
這篇文章主要介紹了PHP設(shè)計模式之 策略模式Strategy,結(jié)合實(shí)例形式詳細(xì)分析了PHP基于對象行為型的策略模式Strategy具體原理、實(shí)現(xiàn)技巧與相關(guān)操作注意事項,需要的朋友可以參考下2020-05-05PHP實(shí)現(xiàn)服務(wù)器狀態(tài)監(jiān)控的方法
這篇文章主要介紹了PHP實(shí)現(xiàn)服務(wù)器狀態(tài)監(jiān)控的方法,可實(shí)現(xiàn)對指定IP服務(wù)器狀態(tài)的有效監(jiān)控,非常具有實(shí)用價值,需要的朋友可以參考下2014-12-12