这是我第一次使用 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 连接的。
您正在使用“轻松连接”语法,因此
hostname
应为 'localhost:1521/FREEPDB1'
。 /
之后的部分是服务名称。您当前拥有 SYSDBA
,这是角色名称,而不是服务名称;当您以 SYS
连接时,您可能需要将其包括在内。这不是我做过的事情,但根据其他客户,你可能想要类似的东西:
'hostname' => 'localhost:1521/FREEPDB1',
'username' => 'sys AS SYSDBA',
'password' => '12345678',
'database' => '',
'dbdriver' => 'oci8',
您只能以
SYS
身份连接来执行 DBA 任务。对于正常工作,创建一个仅具有必要权限的新用户并使用该用户进行连接(没有 SYSDBA
角色)。