一、使用的软件版本及需求说明

软件版本

  • Apache 2.4.39
  • PHP 5.6.9
  • MySQL 5.7
  • Oracle 11g
  • ThinkPHP 5.0

需求说明

当前项目中为PHP+MySQL结构,在后续的开发中需要加入对Oracle数据库的操作,所以需要项目可以同时连接操作MySQL和Oracle数据库,MySQL为原有默认操作,在需要操作Oracle库时临时切换数据库连接。

二、PHP配置Oracle支持扩展

1、准备需要的文件

下载Oracle客户端支持库

https://www.oracle.com/database/technologies/instant-client/downloads.html

下载PHPOracle支持扩展文件

http://pecl.php.net/package/oci8

2、将对应文件放在对应位置

将客户端文件中的oci.dll文件放入C:\Windows\System32目录中,将PHP扩展文件php_oci8.dll放入PHP安装目录的\ext目录下

3、在PHP中配置扩展

打开php.ini文件,在其中加入如下内容,然后重启Apache服务

extension=php_oci8.dll
extension=php_pdo_oci.dll # 此文件为PHP安装包内自带

注:如果以上配置存在,则将前面的“;”注释符号去掉即可

4、检查扩展加载是否成功

使用phpinfo()查看扩展加载情况,检查OCI8PDO_OCI吃否成功显示

三、遇到的一些坑及解决过程

1、ThinkPHP5.0如何配置第二个Oracle数据库?

可在config.php中添加如下配置

// Oracle数据库配置
'oracle'     => [
    'type'            => '\think\oracle\Connection', // 数据库类型
    'hostname'        => '127.0.0.1', // 服务器地址
    'database'        => 'dbname', // 数据库名
    'username'        => 'username', // 用户名
    'password'        => 'password', // 密码
    'hostport'        => '1521', // 端口
    // 其他的数据库连接参数...
    'charset'         => 'zhs16gbk', // 字符集
],

默认情况仍使用MySQL数据库,需要调用Oracle数据库是使用如下语句

Db::connect(config('oracle'))->query('SQL语句', [], false, true);

2、提示找不到Oracle方法类

Class '\think\oracle\Connection' not found

原因是ThinkPHP5.0中默认不包含Oracle支持类,需要下载后手动加入扩展

下载地址:https://github.com/HelloWuJiaYi/SiteEncrypt

其中有3.0、2.0和master三个版本,需要根据ThinkPHP的版本下载对应的版本,ThinkPHP5.0下载的是master这个。下载后将文件夹名改为oracle,并放置在.\thinkphp\library\think目录下后,即可成功调用Oracle方法类。

3、各种提示OCI扩展加载失败的可能原因和解决办法

  1. Oracle客户端、OCI扩展支持与PHP版本不匹配,下载到错误的文件版本
  2. 缺少相关文件,可将下载的Oracle客户端支持库文件夹下的dll文件都拷贝到system32目录下,一般就可以解决

标签: PHP, Oracle, ThinkPHP

添加新评论