如何将 PHP oci8_19 与 oracle free 23.5.0-lite 连接

问题描述 投票:0回答:1

这是我第一次使用 Oracle 数据库,我运行了

container-registry.oracle.com/database/free:23.5.0.0-lite
容器,并且使用此凭据运行良好
localhost:1521 as sysdba, sys:12345678 FREEPDB1

当我尝试通过容器内的 sqlplus 或 Windows 11 中的 dbeaver 连接时,它工作正常。但问题是,它不是从我的 codeigniter 项目连接的。

我已经启用了 php 扩展 oci8_19,我已经像这样设置了 codeigniter 数据库

'hostname' => 'localhost:1521/SYSDBA',
'username' => 'sys',
'password' => '12345678',
'database' => 'FREEPDB1',
'dbdriver' => 'oci8',

但是,我遇到了这样的错误

A PHP Error was encountered
Severity: Warning

Message: oci_connect(): ORA-12514: TNS:listener does not currently know of service requested in connect descriptor

Filename: oci8/oci8_driver.php

Line Number: 238

Backtrace:

File: D:\project\application\third_party\ion_auth\models\Ion_auth_model.php
Line: 174
Function: database

File: D:\project\application\third_party\ion_auth\libraries\Ion_auth.php
Line: 71
Function: model

File: D:\project\application\core\MY_Controller.php
Line: 9
Function: __construct

File: D:\project\application\controllers\Auth.php
Line: 9
Function: __construct

File: D:\project\index.php
Line: 320
Function: require_once

如何解决这个问题?我需要使用另一个 php 扩展吗?

我希望它可以通过 codeigniter 或另一个 php 项目正常连接,因为它是从我的 dbeaver 或 sqlplus 连接的。

php oracle-database
1个回答
0
投票

您正在使用“轻松连接”语法,因此

hostname
应为
'localhost:1521/FREEPDB1'
/
之后的部分是服务名称。您当前拥有
SYSDBA
,这是角色名称,而不是服务名称;当您以
SYS
连接时,您可能需要将其包括在内。这不是我做过的事情,但根据其他客户,你可能想要类似的东西:

'hostname' => 'localhost:1521/FREEPDB1',
'username' => 'sys AS SYSDBA',
'password' => '12345678',
'database' => '',
'dbdriver' => 'oci8',

您只能以

SYS
身份连接来执行 DBA 任务。对于正常工作,创建一个仅具有必要权限的新用户并使用该用户进行连接(没有
SYSDBA
角色)。

© www.soinside.com 2019 - 2024. All rights reserved.