您必须正确配置 TNSNAMES.ora 文件,其中存储了有关连接到数据库的信息。Oracle 错误器 ORA-12514 说:
TNS:监听器当前不知道连接描述符中请求的服务
函数 OCILogon 具有这种语法(我不是 PHP 开发人员,如果我说的不对,请见谅):
资源 oci_connect ( 字符串 $username , string $password [, string $connection_string [, string $character_set [, int $session_mode ]]] )
在您的示例中,位于第三位置参数“主机”上。但手册说“连接字符串”。此“连接字符串”必须通过文件 $ORACLE_HOME/network/admin/tnsnames.ora 文件进行配置($ORACLE_HOME 是安装 Oracle 客户端的文件夹)。
TNSNAMES.ORA 看起来像这样(示例):
TEST_DB = (DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (COMMUNITY = tcp.world)(PROTOCOL = TCP)(Host = 127.0.0.1)(Port = 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());
?>