前提:

  • PHP版本: 7.4.3
  • Laravel版本: 8.*

1、PHP环境

检查PHP对应版本文件夹下面ext目录里是否有以下文件:

  • 1、php_oci8.dll
  • 2、php_oci8_11g.dll
  • 3、php_oci8_12c.dll
    没有以上文件则到官网下载oci8扩展(http://pecl.php.net/package/oci8),下载对应PHP版本即可,下载完成后将这三个文件复制到ext目录下

配置php.ini文件


extension=php_oci8_11g //去掉前面分号重启服务即可(搜索不到直接复制进去,默认是php_oci8_12c 因个人需求我改成了11g)
extension=php_pdo_oci

完成以上操作后查看phpinfo()是否成功开启
如图:image

2、Laravel环境

安装扩展

composer require yajra/laravel-oci8:^8 //因PHP版本是7.4所以指定版本
  • 我这里主要使用的是mysql数据库,oracle数据库只作为偶尔取数据使用
  • 修改在config文件夹下的database.php

'oracle' => [
            'driver'        => 'oracle',
            'tns'           => env('DB_TNS', ''),
            'host'          => env('DB_HOST', '127.0.0.1'),
            'port'          => env('DB_PORT', '1521'),
            'database'      => env('DB_DATABASE', 'MPPAYUAT'),
            'username'      => env('DB_USERNAME', 'payment'),
            'password'      => env('DB_PASSWORD', 'payment'),
            'charset'       => env('DB_CHARSET', 'AL32UTF8'),
            'prefix'        => env('DB_PREFIX', ''),
            'prefix_schema' => env('DB_SCHEMA_PREFIX', ''),
            'service_name'  => env('DB_SERVICE_NAME', ''), //对应SID
        ],
        
//具体链接数组信息请参照github (https://github.com/yajra/laravel-oci8)

修改ConnectionFactory.php中的createConnector函数和createConnection函数
文件在vendor/laravel/framework/src/illuminate/Database/Connectors/ConnectionFactory.php

添加如下的命名空间引用:

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

createConnector函数:添加如下代码:

case 'oracle':
                return new OracleConnector;
                

如图:image

createConnection函数:添加如下代码:

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

如图:image

  • 修改 processInsertGetId 函数

    文件在vendor/yajra/laravel-oci8/src/Oci8/Query/processors/OracleProcessor.php

$statement->bindParam($parameter, $id, PDO::PARAM_STR, 20);//PDO::PARAM_STR 主键的 数据类型
  • 至此已完成了laravel链接oracle的所有配置支持

3、测试

$openList = DB::connection('oracle')->select("SELECT * FROM xxxxxx");
Var_dump($openList);

有结果返回且不报错则成功

最后修改:2023 年 08 月 16 日
您的赞赏是对我最大的支持。