ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

Laravel连接oracle数据库

2022-01-21 15:03:20  阅读:261  来源: 互联网

标签:Laravel laravel 数据库 DB oci8 env oracle php


首先确定你的PHP已经支持oracle数据库的链接。PHP需要安装OCI8扩展。

一、PHP开启oci8

1.到官网下载oci8扩展(http://pecl.php.net/package/oci8

php_oci8.dll
php_oci8_11g.dll
php_oci8_12c.dll
三个拓展文件分别对应Oracle10g、11g、12g
将拓展文件复制到php文件夹里面的ext文件夹里面

2.配置php.ini
oci8.privileged_connect = On
extension=php_oci8_11g.dll
extension=php_pdo_oci.dll
去掉分号,然后重启服务(Apache or IIS)

3.查看是否开启
phpinfo();

至此可以用oci_connect连接Oracle数据库,如下:

$conn = oci_connect('scott', 'tiger', '10.100.21.112:1521/oracdb');
if (!$conn) {
    $e = oci_error();
    print htmlentities($e['message']);
    exit;
}else {
    echo "连接oracle成功!";
}

确定PHP可以连接ORACLE数据库之后。我们使用composer安装laravel支持oracle连接的插件 yajra/laravel-oci8

一:使用composer安装 yajra/laravel-oci8

1:运行如下命令:

composer create-project --prefer-dist laravel/laravel learnlaravel8
# 进入learnlaravel8目录
# 换源
composer config -g repo.packagist composer https://packagist.phpcomposer.com
composer require yajra/laravel-oci8
php artisan vendor:publish --tag=oracle

2:安装过程中可能会报错,不要纠结那些报错,最简单的解决办法:

试试

php artisan cache:clear

如果这不起作用,请删除你的vendor目录和composer.lock文件并重新运行composer install。

二:配置laravel使用oracle数据库

首先说明一下:我这里主要使用的是mysql数据库,oracle数据库只作为偶尔取数据使用。

1:修改在config文件夹下的database.php

如果你想默认使用oracle数据库,则需要修改:’default’ => env(‘DB_CONNECTION’, ‘oracle’),

但是我这里就不需要了。
增加如下:

'oracle' => [
            'driver'        => 'oracle',
            'tns'           => env('DB_TNS', ''),
            'host'          => env('DB_HOST', '10.0.101.177'),
            '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', ''),
        ],

记得将数据改成你自己的。

注意:这里的'tns' 取的是.env文件里'DB_TNS'的值,可以自己改'DB_TNS'的值!

当这里的数据库配置好了后,我们还需要干什么呢?

现在我们要把oracle数据库当做默认的数据库:还是在database.php文件里,我们找到这个:

'default' => env('DB_CONNECTION', 'oracle'),

​意思就是当.env 文件里没有DB_CONNECTION的时候,就用oracle,有的话就用DB_CONNECTION的值.

那DB_CONNECTION的值怎么修改呢?我们需要打开.env这个文件,把里面的DB_CONNECTION的值给改一下就行了.或者直接把DB_CONNECTION给删了也行。

 

具体链接数组信息请参照github

https://github.com/yajra/laravel-oci8

2:修改ConnectionFactory.php中的createConnector函数和createConnection函数

(1):文件在vendor/laravel/framework/src/illuminate/Database/Connectors/ConnectionFactory.php

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

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

(3):createConnector函数:

添加如下代码:

case 'oracle':
                return new OracleConnector;

如下图所示:

在这里插入图片描述

(4):createConnector函数:

添加如下代码:

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

如下图所示:

在这里插入图片描述

3:修改config/app.php

在providers里面增加

Yajra\Oci8\Oci8ServiceProvider::class,

4:修改 processInsertGetId 函数

(在vendor/yajra/laravel-oci8/src/Oci8/Query/processors/OracleProcessor.php)

$statement->bindParam($parameter, $id, PDO::PARAM_STR, 20);//PDO::PARAM_STR 主键的 数据类型

意:这里的'tns' 取的是.env文件里'DB_TNS'的值,可以自己改'DB_TNS'的值!

当这里的数据库配置好了后,我们还需要干什么呢?

现在我们要把oracle数据库当做默认的数据库:还是在database.php文件里,我们找到这个:

​意思就是当.env 文件里没有DB_CONNECTION的时候,就用oracle,有的话就用DB_CONNECTION的值.

那DB_CONNECTION的值怎么修改呢?我们需要打开.env这个文件,把里面的DB_CONNECTION的值给改一下就行了.或者直接把DB_CONNECTION给删了也行。
到这为止,Oracle已经可以在laravel里使用了!!!

至此已完成了laravel链接oracle的所有配置支持

三:测试

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

有结果,不报错,即成功。

标签:Laravel,laravel,数据库,DB,oci8,env,oracle,php
来源: https://blog.csdn.net/weixin_37222169/article/details/122620835

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有