2

我有各种各样的麻烦...

这是我正在使用的代码:

$c = OCILogon('user', 'pass', 'host');

我收到以下错误:

PHP 警告:ocilogon(): ociopen_server: Error while trying to retrieve text for error ORA-12514 in D:\Inetpub\wwwroot**\oracle.php on line 26

有谁知道我到底做错了什么?

它是 PHP4,IIS6 顺便说一句。我在 PHP5、IIS7 上也试过这个,但没有运气。

感谢您提供的任何帮助... :(

4

2 回答 2

2

您必须正确配置 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());
?>
于 2010-08-27T17:41:04.337 回答
0

尝试使用持久连接 oci_pconnect()... 为我工作

于 2014-01-27T13:49:25.320 回答