在 IIS 上使用 PHP 连接到 Oracle

发布于 2024-09-16 10:26:26 字数 359 浏览 2 评论 0原文

我遇到了各种各样的麻烦...

这是我正在使用的代码:

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

我收到以下错误:

PHP 警告:ocilogon(): ociopen_server: 尝试检索第 26 行 D:\Inetpub\wwwroot**\oracle.php 中错误 ORA-12514 的文本时出错

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

顺便说一句,它是 PHP4、IIS6。我也在 PHP5、IIS7 上尝试过,但没有成功。

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

I'm having all sorts of trouble...

Here is the code I'm using:

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

I get the following error:

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

Anyone know what the hell I'm doing wrong?

It's PHP4, IIS6 btw. I've tried this on PHP5, IIS7 as well, no luck.

Thanks for any help I can get... :(

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

眼波传意 2024-09-23 10:26:26

您必须正确配置 TNSNAMES.ora 文件,其中存储有关数据库连接的信息。 Oracle 错误 ORA-12514 说:

TNS:监听器当前不知道
连接中请求的服务数量
描述符

符函数 OCILogon 具有以下语法(我不是 PHP 开发人员,如果我不正确,请原谅):

资源 oci_connect ( 字符串
$用户名,字符串$密码[,
字符串 $connection_string [, 字符串
$character_set [, int $session_mode
]]])

在您的示例中位于第三个位置参数“host”。但手册说“连接字符串”。
此“连接字符串”必须通过文件 $ORACLE_HOME/network/admin/tnsnames.ora 文件进行配置($ORACLE_HOME 是安装 Oracle 客户端的文件夹)。

TNSNAMES.ORA 看起来像这样(示例):

TEST_DB = (描述 =(地址列表
=(地址=(社区= tcp.world)(协议= TCP)(主机=
127.0.0.1)(端口 = 1521)))(CONNECT_DATA = (SID = TESTDB_SID)))

相反:

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

您应该使用:

$c = OCILogon('用户', '通行证', '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());
?>

You must have correctly configured TNSNAMES.ora file, where is stored information about connection to database. Oracle errorr ORA-12514 says:

TNS:listener does not currently know
of service requested in connect
descriptor

Function OCILogon have this syntax (I'am not PHP developer, so excuse me if I was not right):

resource oci_connect ( string
$username , string $password [,
string $connection_string [, string
$character_set [, int $session_mode
]]] )

In your example is on third position parametr "host". But manual says "connectin string".
This "connection string" must be coonfigured throught file $ORACLE_HOME/network/admin/tnsnames.ora file ($ORACLE_HOME is folder where is Oracle client installed).

TNSNAMES.ORA look like this(example):

TEST_DB = (DESCRIPTION =(ADDRESS_LIST
=(ADDRESS = (COMMUNITY = tcp.world)(PROTOCOL = TCP)(Host =
127.0.0.1)(Port = 1521)))(CONNECT_DATA = (SID = TESTDB_SID)))

Instead:

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

You should use:

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

...TEST_DB is service name from tnsnames.ora file

And yet for complementing (my file $ORACLE_HOME/network/admin/sqlnet.ora look like this):

SQLNET.AUTHENTICATION_SERVICES= (NTS)
NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
NAME.DEFAULT_ZONE = world
NAMES.DEFAULT_DOMAIN = world

And finally PHP manual example (connection string can be inserted directly into variables in 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());
?>
z祗昰~ 2024-09-23 10:26:26

尝试使用持久连接 oci_pconnect()...对我有用

try using persistant connection oci_pconnect()... worked for me

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文