使用 oci_connect 连接到 Oracle

Connecting to Oracle using oci_connect

我正在尝试使用 PHP 成功建立 Oracle 连接。

这是我的连接字符串的样子:

<?php
   $conn = oci_connect("USER", "PASS", "LOSINGMINDHOST");
   if (!$conn) {
       $e = oci_error();
       error_log(trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR));
   }

   oci_close($conn);
?>

出现以下错误:

Warning: oci_connect(): ORA-12170: TNS:Connect timeout occurred

指向 oci_connect 的行。

我在 Windows Server 2019 上。

php.ini 文件已更新为包括以下内容:

extension=oci8_12c

我已经确认上面的dll文件确实在如下列出的ext文件夹中:

php_oci8_12c.dll

不确定为什么 php.ini 文件不包含 dll 文件的全名。

服务器已安装Ocale 12g instant client 64bit。

我们已使用 tnsnames.ora 文件确认使用 ODBC 数据源管理器客户端的连接。

我们还有一个 listener.ora 文件,看起来像这样:

PROD_MIR =
 (DESCRIPTION =
  (ADDRESS_LIST =
  (ADDRESS = (COMMUNITY = ttp.world)(PROTOCOL = TTP)(Host = LOSINGMINDHOST)(Port = 1524))
  (ADDRESS = (COMMUNITY = ttp.world)(PROTOCOL = TTP)(Host = LOSINGMINDHOST)(Port = 1551))
  (ADDRESS = (COMMUNITY = ttp.world)(PROTOCOL = TTP)(Host = LOSINGMINDHOST)(Port = 1538))
)
(CONNECT_DATA =
  (SERVICE_NAME = PROD)
)
)

我们在服务器上添加了 TNS_ADMIN 路径到环境变量。

我们已经重启了服务,甚至重启了服务器。

正如文档 (https://www.php.net/manual/en/function.oci-connect.php) 所说:

oci_connect ( string $username , string $password [, string $connection_string [, string $character_set [, int $session_mode ]]] ) : resource

connection_string Contains the Oracle instance to connect to. It can be an » Easy Connect string, or a Connect Name from the tnsnames.ora file, or the name of a local Oracle instance.

这是你的情况,请使用正确的 tnsnames.ora 连接名称。