繁体   English   中英

使用 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 即时客户端 64 位。

我们已使用 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 ]]] ) : 资源

connection_string 包含要连接到的 Oracle 实例。 它可以是 » Easy Connect 字符串,或来自 tnsnames.ora文件的连接名称,或本地 Oracle 实例的名称。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM