linux PHP7.2环境下安装pdo_oci,oci8扩展使用yii连接oracle

工作原因,需要使用oracle数据库,从网上找了一圈资料,很多都是下载PDO_OCI-1.0.tgz去编译,当然,他们是在php5.3-5.6环境下进行的。可是php7.2这套路子就不行了,因为7.2的PDO版本太高了,导致即便使用上面的方法编译出来的pdo_oci.so也是无法使用的。经过一番折腾,发现,原来php7.2源码包扩展目录下自带了pdo_oci的源码,直接编译就OK了,害的我走了那么多弯路.

接下来我们先安装oci8扩展:

Step 1

Download the Oracle Instant Client and SDK from Oracle website. (Need to login in Oracle page)

Instant Client for Linux x86-64 (64-bit)

Files: instantclient-basic-linux.x64-12.2.0.1.0.zip and instantclient-sdk-linux.x64-12.2.0.1.0.zip.

Step 2

Create a new folder to store Oracle Instant Client zip files on your server.

Upload the Instant Clients files inside this folder.

mkdir /opt/oracle

Step 3

Now we need to extract the files.

cd /opt/oracle
unzip instantclient-basic-linux.x64-12.2.0.1.0.zip
unzip instantclient-sdk-linux.x64-12.2.0.1.0.zip

Step 4

Next, we need to create a symlink to Instant Client files.

ln -s /opt/oracle/instantclient_12_2/libclntsh.so.12.1 /opt/oracle/instantclient_12_2/libclntsh.so
ln -s /opt/oracle/instantclient_12_2/libocci.so.12.1 /opt/oracle/instantclient_12_2/libocci.so

Step 5

Add the folder to our ldconfig.

echo /opt/oracle/instantclient_12_2 > /etc/ld.so.conf.d/oracle-instantclient

Step 6

Update the Dynamic Linker Run-Time Bindings

ldconfig

Done. Now we can proceed to the next part.

 

 

 

 

 

 

 

 

 

 

 

 

浏览器打开可以看到oci8扩展安装成功!

 可以看到已经安装成功了

接下来安装PDO_OCI扩展:

php官方扩展库里面是老版本的也就是只支持PHP5.*的版本,我们去官方下载PHP新版本,里面包含有 PDO_OCI扩展:

git clone https://github.com/php/php-src.git

进入扩展里面:

cd php-str/ext/pdo_oci

切换到当前PHP的版本分支,我当前php版本是7.2:

git checkout  PHP-7.2

 /usr/bin/phpize7.2

设置编译参数,oci8的安装位置:

./configure --with-php-config=/usr/bin/php-config7.2 --with-pdo-oci=instantclient,/home/vagrant/oracle/instantclient_12_1

 sudo make 

 sudo make install

 在php.ini添加so文件并重启php:

可以看到扩展已经生成:

浏览器打开可以看到PDO_OCI扩展安装成功!

 

接下来我们用yii查询oracle,看看是否能查询正常:

先再yii config的public文件里面增加oracle连接配置信息:

'oci'=>array(
        'class'=>'CDbConnection',
        'connectionString' => 'oci:dbname=//192.168.0.200:3021/orcl;charset=UTF8',
        'emulatePrepare' => true,
        'username' => 'lch',
        'password' => 'lch8888',
    ),

接着我们写一个sql查询语句:

$sql = 'SELECT * FROM WORDERDB.V_JD_CASHRECEIPT WHERE order_id=:order_id';
$row = Yii::app()->oci->createCommand($sql)->queryRow(true, [':order_id'=>$order_id]);
echo "<pre>";
print_r($row);

结果:

 这样就连接oracle数据库了。

おすすめ

転載: blog.csdn.net/lchmyhua88/article/details/120388165