1

我很难从 PHP5 连接到 Oracle 9.2。我已经尝试过 1.4.2 和 1.4.5 的 OCI,并且能够连接到 Oracle 10g 及更高版本。我已经设置了一个测试数据库连接脚本,如下所示:

PHP代码:

echo "Testing Connection...";
ociinternaldebug(1);
$conn = oci_new_connect('someuser', 'somepassword', '(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 172.0.0.2 )(PORT = 1521)) (CONNECT_DATA = (SID = ORCL)))');

if (!$conn) {
    $e = oci_error();
    print_r ($e);
}
else
{
    echo('Successful');
}

我收到此错误:

OCI8 调试:OCINlsEnvironmentVariableGet at (ext\oci8\oci8.c:1826)
OCI8 DEBUG L1:使用共享池:(0x2078b68) at (ext\oci8\oci8.c:3028)
OCI8 调试:OCIHandleAlloc 位于 (ext\oci8\oci8.c:3039)
OCI8 调试:OCIHandleAlloc 位于 (ext\oci8\oci8.c:3049)
OCI8 调试:OCIAttrGet 位于 (ext\oci8\oci8.c:3082)
OCI8 调试:OCIAttrGet 位于 (ext\oci8\oci8.c:3083)
OCI8 调试 L1:(numopen=0)(numbusy=0) 在 (ext\oci8\oci8.c:3085)
OCI8 调试:OCISessionGet 位于 (ext\oci8\oci8.c:3096)
OCI8 调试:OCIErrorGet at (ext\oci8\oci8.c:1632)
OCI8 调试:OCIHandleFree 在 (ext\oci8\oci8.c:2218)
OCI8 调试:OCIHandleFree 在 (ext\oci8\oci8.c:2221)
OCI8 调试:OCIErrorGet at (ext\oci8\oci8.c:1632)
大批
(
    [代码] => 1017
    [消息] => **ORA-01017:用户名/密码无效;登录被拒绝**
    [偏移] => 0
    [sql文本] =>
)
4

2 回答 2

1

您可以使用 sqlplus 从同一台机器/使用相同的用户名/密码登录到同一个数据库吗?

于 2011-04-06T13:31:55.450 回答
0

您的密码可能有一些字符集问题吗?您的客户端或服务器之一不支持其中的角色吗?Mabye PHP 错误地转换了字符,或者当您使用 SQL*Plus 时它们被错误地转换,并且 PHP 发送的“正确”版本在服务器看来是错误的。

运行此查询以查看服务器实际在做什么。如果返回代码为 1017,则服务器获取错误的用户名或密码。

select userid, userhost, terminal, returncode, ntimestamp#
from sys.aud$
order by ntimestamp# desc;

我认为我从未见过 Oracle 错误消息的谎言。但是我看到一些程序误解了错误消息。例如,如果您的密码已过期但您有宽限期,Oracle 将返回错误但仍允许您登录。SQL*Plus 将警告“ORA-28002:密码将在 8 天内过期”,但某些程序会错误地将其解释为登录失败,甚至可能会显示“用户名/密码错误”。但这是一个 Oracle 产品,它显示一个 Oracle 错误代码,所以这是一个很长的镜头。

于 2011-04-07T06:23:30.873 回答