经证实该版本不需要那么多冗余配置,它会自动装载,我在下方标明
一. 打开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默认转小写。