[英]Connecting to oracle: Using PDO works but using oci_connect not
[英]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.