PHP连接oracle,开启oci扩展,Laravel配置多数据库,连接oracle

本文详细介绍了如何在PHP环境下配置Oracle数据库连接,包括oci扩展的启用、instantclient的下载与配置,以及环境变量设置。同时,提供了在Laravel框架中使用多数据库,特别是配置Oracle数据库的具体步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

经证实该版本不需要那么多冗余配置,它会自动装载,我在下方标明

一. 打开oci扩展

在这里插入图片描述

php.ini文件中去除扩展前注释,视版本问题可加oci8与oci11g oci12c扩展

extension=pdo_oci
extension=oci8_12c

在这里插入图片描述
下载对应dll包放在ext目录下。
重启apache,phpinfo()查看扩展开启情况。

二. 下载instant client

因连接oracle需下载oracle客户端,也可只下载对应Instant Client包
在这里插入图片描述
拿到该路径,cmd创建对应目录
在这里插入图片描述
注意:该目录每个人都不一样,以你自己提示路径为准

Oracle下载instant client包

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

三. 配置

将下载的instant client解压 文件拷贝到之前创建目录
在这里插入图片描述
在这里插入图片描述

添加环境变量

Path中增加 C:\php-snap-build\deps_aux\oracle\x64\instantclient_12_1\sdk
ORACLE_HOME = C:\php-snap-build\deps_aux\oracle\x64\instantclient_12_1\sdk
TNS_ADMIN = C:\php-snap-build\deps_aux\oracle\x64\instantclient_12_1\sdk
以你自己目录为准

此步两次拷贝在该版本可省略,如报错则版本过低加上即可:同样将该目录下所有文件拷贝至Apache的bin目录下
再次拷贝至PHP根目录下

四. 连接

重启apache服务 phpinfo()打印扩展是否生效
在这里插入图片描述
测试连接:

        $conn = oci_connect('username', 'password', 'localhost/orcl');
        if (!$conn) {
            $e = oci_error();
            print htmlentities($e['message']);
            exit;
        }else {
            echo "连接oracle成功!";
        }

成功
在这里插入图片描述
注:instant client非客户端,所以连接需要连接远程oracle服务器


二更

Laravel配置oracle(多数据库)
一.下载扩展包 我使用composer安装yajar/laravel-oci8,项目地址:https://github.com/yajra/laravel-oci8
// 切换阿里云镜像,配置到全局
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/

//根据你laravel版本来指定该包版本,我的是5.8,-vvv显示详细输出
composer require yajra/laravel-oci8:^5.8 -vvv
二.配置

2.1修改在config文件夹下的database.php,因我主环境仍使用mysql,额外配置oracle,所以我不修改默认连接方式
官方给出两种配置方式:
在这里插入图片描述
我是oci二类驱动,这里使用第二种
在这里插入图片描述
这里不说明每项代表什么了,应该都知道,特别注意一点:我在此已经踩坑:
service_name服务名,一般默认orcl,如果你有修改可以使用sql:select name from V$DATABASE;来查看,username必须与数据库同名,oci寻找指定数据库只会去找账号同名数据库!!
数据中文charset使用utf8
关于账号必须同名数据库这点有配置项可以修改,但比较繁琐,我无此需求没有研究,需要的小伙伴可以自行百度。

至此向下laravel5.5之上可省略,仅需在model指定连接即可,主键类型在model也可通过参数配置
2.2修改ConnectionFactory.php中的createConnector函数和createConnection函数
(vendor/laravel/framework/src/illuminate/Database/Connectors/ConnectionFactory.php)
ConnectionFactory类引用以下声明

use Yajra\Oci8\Connectors\OracleConnector;
use Yajra\Oci8\Oci8Connection;

createConnector函数加oracle:

case 'sqlsrv':
      return new SqlServerConnector;
case 'oracle':
      return new OracleConnector;

createConnection函数加oracle:

case 'sqlsrv':
      return new SqlServerConnection($connection, $database, $prefix, $config);
case 'oracle':
      return new Oci8Connection($connection, $database, $prefix, $config);

修改config/app.php在providers里面增加

Yajra\Oci8\Oci8ServiceProvider::class,

修改 processInsertGetId 函数(vendor/yajra/laravel-oci8/src/Oci8/Query/processors/OracleProcessor.php)

//修改原有的int类型即可,如您的主键不需要string类型支持则可不改
$statement->bindParam($parameter, $id, PDO::PARAM_STR, 20);//PDO::PARAM_STR 主键的 数据类型

实体类 model 指定连接方式:

protected $connection="oracle";

至此laravel与oracle配置已完成
注意:使用 Eloquent ORM或DB操作oracle字段时,必须全部小写,laravel默认转小写。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值