跳坑成功,手摸手带你使用PHP连接Oracle数据库
Posted 优小U
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了跳坑成功,手摸手带你使用PHP连接Oracle数据库相关的知识,希望对你有一定的参考价值。
文章目录
看起来挺奇怪的,为啥是php
和Oracle
呢,一般不是PHP
和mysql
吗,他们俩才是黄金搭档啊🤣,一切都源于免费啊~,Oracle数据库是免费薅来的,俗话说不用白不用🤩,既然有这个资源就像怎么利用起来,然后就开始整,因为网络上的文章都是老的,已经不适用于新版本的数据库和PHP版本了,结果遇到了很多坑,经过一周的跳坑终于成功上岸,特此记录✌️
1. Linux版
- 服务器:CentOS7
- PHP版本:V7.4.3
- Oracle数据库版本:19c
1.1 安装oracle客户端
首先去Oracle
官网下载三个包到电脑本地,下载链接:
https://www.oracle.com/database/technologies/instant-client/linux-x86-64-downloads.html
- oracle-instantclient-devel-21.1.0.0.0-1.x86_64.rpm
- oracle-instantclient-basic-21.1.0.0.0-1.x86_64.rpm
- oracle-instantclient-sqlplus-21.1.0.0.0-1.x86_64.rpm
将这三个包上传到/usr/lib/oracle
目录下(oracle
文件夹为新建文件夹),进入文件夹执行安装命令:
$ rpm -ivh oracle-instantclient-*
添加环境变量,并保存:
$ vim /etc/profile
# 在尾部增加如下内容
export ORACLE_HOME=/usr/lib/oracle/21/client64
export ORACLE_BASE=/usr/lib/oracle/21
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
export PATH=$ORACLE_HOME/bin:$PATH
保存退出后执行以下命令后使环境变量生效:
$ source /etc/profile
🔔 注意:安装oci8和pdo_oci扩展都需要进行这第一步
1.2 安装oci8扩展
因编译安装经常报各种错误,这里推荐使用pecl
安装:
$ export PHP_DTRACE=yes
$ pecl install oci8-2.2.0
# 输入路径
instantclient,/usr/lib/oracle/21/client64/lib
🔔 若报错 Cannot find sys/sdt.h which is required for DTrace support
执行安装:yum install systemtap-sdt-devel
看到以下信息表示安装扩展成功:
Build process completed successfully
Installing '/usr/lib64/php/modules/oci8.so'
install ok: channel://pecl.php.net/oci8-2.2.0
configuration option "php_ini" is not set to php.ini location
You should add "extension=oci8.so" to php.ini
在php.ini
中增加扩展引入extension=oci8.so
:
$ vi /etc/php.ini
# 添加
extension=oci8.so
# 验证是否成功
$ php -m | grep oci8
# 出现oci8表示安装成功
oci8
# 需要修改下/usr/lib64/php/modules/oci8.so 文件权限755
1.3 安装pdo_oci扩展
vi /etc/ld.so.conf
# 加入此行,保存退出
/usr/lib/oracle/21/client64/lib/
建立软连接,如果安装oci8扩展时,已经建立过,跳过即可
ln -s /usr/lib/oracle/21/client64 /usr/lib/oracle/21/client
ln -s /usr/include/oracle/21/client64 /usr/include/oracle/21/client
去PHP官方下载php-7.4.19.tar.gz
压缩文件,解压后将pdo_oci
文件夹放到服务器的php扩展目录中:cd /usr/include/php/ext
,然后执行下面的命令:
# 执行下方命令,编译安装处理,类似oci8安装
$ cd /usr/include/php/ext/pdo_oci
$ /usr/bin/phpize
$ ./configure --with-pdo-oci=instantclient,/usr/lib/oracle/21/client64/lib \\
--with-oci8=instantclient,/usr/lib/oracle/21/client64/lib
$ make && make install
添加pdo_oci
扩展:
$ vi /etc/php.d/pdo_oci.ini # pdo_oci.ini是新建的
$ extension=/usr/lib64/php/modules/pdo_oci.so # 此处为pdo_oci.so的全路径,在编译后有展示
重启PHP
服务:
systemctl restart httpd
systemctl restart php-fpm
1.4 测试PHP连接Oracle数据库
首先准备连接文件,在oracle数据库下载 oralce wallet
文件,这个在Oracle数据库后台管理里面下载,解压出来一般有以下文件:
将文件夹放到服务器的一个目录里(🔔注意保密哦),这里我放在/usr/lib/oracle/Wallet_videoplatform2
,然后PHP
测试代码如下:
<?php
// tnsnames.ora 信息里拼接数据库连接信息(照着拼就行了)
$dbstr ="tcps://adb.ap-seoul-1.oraclecloud.com:1522/ge815e794bb3bb9_xxxxxxxxx_high.adb.oraclecloud.com?wallet_location=/usr/lib/oracle/Wallet_videoplatform2";
$dbconn = oci_connect('用户名','密码',$dbstr);
if($dbconn!=false)
echo "连接成功".'<br/>';
if(OCILogOff($dbconn)==true)
echo "关闭连接成功!".'<br/>';//
else
echo "连接失败".'<br/>';
echo phpinfo();
🔔 若出现 ORA-12546: TNS:permission denied 错误执行以下语句即可:
setsebool -P httpd_can_network_connect on
访问页面,结果:
终于连接成功了!✌️
2. Windows版
2.1 安装OCI8
PHP7
需要选择 2.2.0
版本的oci,根据自己的PHP
版本自行选择版本:
下载链接:https://pecl.php.net/package/oci8/2.2.0/windows
可以先通过查看phpinfo()
的PHP Extension Build
栏位查看,我的PHP是NTS
版的,所以下载oci也要是NTS
版的。
下载完后,将解压的文件,拷贝到PHP扩展目录php7.4.3nts\\ext
下覆盖原文件,扩展目录在php.ini
中 extension_dir = xxxxxx
指定。
2.2 安装Oracle Client客户端
Oracle Instant Client
是一组可轻松安装的免费库,允许程序连接到本地或远程 Oracle 数据库实例。
- 首先下载oracle客户端 Oracle 官方客户端下载 我这里下的是
instantclient-basic-windows.x64-19.11.0.0.0dbru.zip
版本。 - 将软件包解压缩到单个目录中,例如
D:\\oracle\\instantclient_19_11
- 将此目录添加到
PATH
环境变量。如果您安装了多个版本的Oracle
库,请确保新目录首先出现在路径中。重新启动任何终端窗口,否则请确保您的应用程序使用了新的PATH
。
下载完后里面有oci.dll
这个文件,当启动了php的扩展后,找的也就是这个 oracle
文件。那php
怎么找这个dll
呢,加系统环境变量即可。
然后修改php.ini
配置文件:
# 去除前面的分号;开启扩展,若没有就添加
extension=pdo_oci
extension=php_oci8.dll
最后,重启 Apache
即可。
查看是否安装成功,可以用 cmd
命令行查看是否已成功安装oci8
扩展,如成功安装则显示以下信息:
也可在phpinfo()
中查看扩展信息:
2.3 测试PHP连接Oracle数据库
首先准备连接文件,在oracle数据库下载 oralce wallet
文件,解压出来一般有以下文件:
将文件放到本地的一个目录里,这里我放在D:\\oracle\\Wallet_videoplatform2
,然后测试代码:
<?php
// tnsnames.ora 信息里拼接数据库连接信息(照着拼就行了)
$dbstr ="tcps://adb.ap-seoul-1.oraclecloud.com:1522/xxxxx_videoplatform2_high.adb.oraclecloud.com?wallet_location=D:\\oracle\\Wallet_videoplatform2";
$conn = oci_connect('ADMIN','xxxxxxx',$dbstr);
if (!$conn)
$e = oci_error();
trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
// 查询并渲染
$stid = oci_parse($conn, 'SELECT * FROM users');
$r = oci_execute($stid);
print "<table border='1'>\\n";
while ($row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS))
print "<tr>\\n";
foreach ($row as $item)
print " <td>" . ($item !== null ? htmlentities($item, ENT_QUOTES) : " ") . "</td>\\n";
print "</tr>\\n";
print "</table>\\n";
oci_free_statement($stid);
访问数据库成功,页面显示数据:
3. 总结
每个人都可能是第一个吃螃蟹的人,如果你有机会遇到了,不要怕,把握机会,拼一下有可能就尝到了甜头。
爬坑不易,点赞支持下🌹
PS:有童鞋想知道怎么获取
永久免费
的服务器和永久免费
数据库私信我,偷偷告诉你哟 😏
以上是关于跳坑成功,手摸手带你使用PHP连接Oracle数据库的主要内容,如果未能解决你的问题,请参考以下文章
2 万字长文| 手摸手带你玩转 JQuery,后端程序员都能上手系列第一期 (建议收藏)