您必须已正确配置 TNSNAMES.ora 文件,其中存储了有关数据库连接的信息。 Oracle 错误器 ORA-12514 说:
TNS:listener 目前不知道
连接中请求的服务
描述符
函数 OCILogon 有这样的语法(我不是 PHP 开发者,如果我说的不对,请见谅):
资源 oci_connect ( 字符串
$username , 字符串 $password [,
字符串 $connection_string [, 字符串
$character_set [, int $session_mode
]]])
在您的示例中,位于第三位置参数“主机”。但手册说“连接字符串”。
此“连接字符串”必须通过文件 $ORACLE_HOME/network/admin/tnsnames.ora 文件进行配置($ORACLE_HOME 是安装 Oracle 客户端的文件夹)。
TNSNAMES.ORA 看起来像这样(示例):
TEST_DB = (DESCRIPTION =(ADDRESS_LIST
=(地址 =(社区 = tcp.world)(协议 = TCP)(主机 =
127.0.0.1)(端口 = 1521)))(CONNECT_DATA = (SID = TESTDB_SID)))
改为:
$c = OCILogon('user', 'pass', 'host');
你应该使用:
$c = OCILogon('user', 'pass', 'TEST_DB');
...TEST_DB 是 tnsnames.ora 文件中的服务名称
但为了补充(我的文件 $ORACLE_HOME/network/admin/sqlnet.ora 看起来像这样):
SQLNET.AUTHENTICATION_SERVICES= (NTS)
NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
NAME.DEFAULT_ZONE = world
NAMES.DEFAULT_DOMAIN = world
最后是PHP手动示例(连接字符串可以直接插入PHP中的变量):
<?php
$db ="(DESCRIPTION =
(ADDRESS =
(PROTOCOL = TCP)
(HOST = HOSTNAMEHERE)
(PORT = 1521)
)
(CONNECT_DATA = (SID = SIDNAMEHERE))
)";
$odbc = ocilogon ('user', 'pass', $db) or die( "Could not connect to Oracle database!") or die (ocierror());
?>