2011-04-06 95 views
1

我很難從PHP5連接到Oracle 9.2。我已經嘗試了OCI的1.4.2和1.4.5,並且我能夠連接到Oracle 10g以上。我設置的測試數據庫連接腳本如下:PHP 5連接到Oracle 9.2

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'); 
} 

我得到這個錯誤:用sqlplus來自同一

 
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] => 
) 

回答

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錯誤代碼,所以這是一個很好的選擇。

+0

這對我有幫助。我轉發到我的dba,他重置我的密碼不包含標點符號,我能夠進入。 – 2011-04-09 04:57:37

1

你能登錄到同一數據庫機器/具有相同的用戶名/密碼?

+0

是的。用戶名和密碼是正確的,我可以登錄到Oracle 10數據庫和但不是9i – 2011-04-06 16:39:48

+0

您可能使用TNSNAMES.ORA通過sqlplus - 但在上面的代碼中,您傳遞一個顯式的sqlnet連接字符串 - 它可能是別名? – symcbean 2011-04-07 08:44:37