PHP 5連接到Oracle 9.2

PHP 5 connecting to Oracle 9.2
投票:1回答:2

我很難從PHP5連接到Oracle 9.2。 我已經嘗試了OCI的1.4.2和1.4.5,並且能夠連接到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 DEBUG: OCINlsEnvironmentVariableGet at (ext\oci8\oci8.c:1826) 
OCI8 DEBUG L1: using shared pool: (0x2078b68) at (ext\oci8\oci8.c:3028) 
OCI8 DEBUG: OCIHandleAlloc at (ext\oci8\oci8.c:3039) 
OCI8 DEBUG: OCIHandleAlloc at (ext\oci8\oci8.c:3049) 
OCI8 DEBUG: OCIAttrGet at (ext\oci8\oci8.c:3082) 
OCI8 DEBUG: OCIAttrGet at (ext\oci8\oci8.c:3083) 
OCI8 DEBUG L1: (numopen=0)(numbusy=0) at (ext\oci8\oci8.c:3085) 
OCI8 DEBUG: OCISessionGet at (ext\oci8\oci8.c:3096) 
OCI8 DEBUG: OCIErrorGet at (ext\oci8\oci8.c:1632) 
OCI8 DEBUG: OCIHandleFree at (ext\oci8\oci8.c:2218) 
OCI8 DEBUG: OCIHandleFree at (ext\oci8\oci8.c:2221) 
OCI8 DEBUG: OCIErrorGet at (ext\oci8\oci8.c:1632) 
Array
(
    [code] => 1017
    [message] => **ORA-01017: invalid username/password; logon denied**
    [offset] => 0
    [sqltext] => 
)
tags:php,oracle,ora-01017
2回答
1
投票

您可以使用sqlplus從同一台機器/使用相同的用戶名/密碼登錄到同一數據庫嗎?


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錯誤代碼,因此很遠。


©2020 sofbug.com - All rights reserved.