前提:
- 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()
是否成功开启
如图:
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;
如图:
createConnection函数:添加如下代码:
case 'oracle':
return new Oci8Connection($connection, $database, $prefix, $config);
如图:
修改 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);