我已经建立了一个Oracle 18c数据库,并试图从一个php文件连接到它,但是当我运行一个简单的连接测试时,我收到一个服务器错误,它似乎无法连接。我运行了print_r(getLoaded_extensions());
,并从输出数组中显示出我目前未按需要使用oci8扩展名。我的连接测试文件包含以下
#!/usr/local/bin/php
<?php
putenv("ORACLE_HOME=/usr/lib/oracle/18.3/client64")
$db = "(DESCRIPTION=(ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = ***.***.*.**)(PORT = 1521)))(CONNECT_DATA=(SID=orcl)))" ;
if($c = OCILogon("username", "password", $db))
{
echo "Successfully connected to Oracle.\n";
OCILogoff($c);
}
else
{
$err = OCIError();
echo "Connection failed." . $err[text];
}
我不确定是否将putenv()错误地设置为oci.dll文件的正确位置,或者我是否首先需要安装扩展名。谢谢
答案 0 :(得分:1)
由于您说过检查了当前使用的扩展名而OCI8不存在,所以我将继续安装该模块并在您的服务器上启用它
答案 1 :(得分:0)
最可能是18c默认安装会创建一个名为ORCL和PDB1(可插拔DB)的容器DB(CDB)。 运行lsnrctl stat以查找创建的服务。 然后,在数据库连接中,使用service_name而不是SID进行连接。在lsnrctl stat的输出中可以看到service_name的值
示例。
$db = "(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = patronus.domain.com)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = pdb1.domain.com)
)
)" ;