2015-06-05 126 views
0

時,我有2現在天嘗試連接到安裝在一臺機器在Windows 7oci_connect警告連接到Oracle數據庫和PHP

運行從PHP服務器端我安裝wampserver和Oracle即時客戶端11.2遠程Oracle數據庫我啓用了oci8 php擴展,我也添加了即時客戶端文件夾到我的路徑變量。 從數據庫端我已經添加了TNS_ADMIN和ORACLE_HOME到路徑變量。

這是我的PHP腳本:

$db= "(DESCRIPTION = 
       (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.43)(PORT = 1521)) 
       (CONNECT_DATA = 
       (SERVER = DEDICATED) 
       (SERVICE_NAME = hasdrubal) 
      ) 
      )"; 
    $conn = oci_connect('SYSTEM', 'pass', $db); 
    if (!$conn) 
    { 
     $e = oci_error(); 
     trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR); 
    } 
    else 
    { 
     die("connected"); 
    } 

我總是得到錯誤

oci_connect ORA-12541:TNS:沒有監聽

字符串是在tsnames相同.ora和聽衆正在運行。我在services.msc中檢查過。

你能幫助我嗎?

+0

那麼你可以用sqlplus連接? – OldProgrammer

+0

是的,我可以連接sqlplus – Safwen

+0

這個錯誤的行爲(如文檔指出的那樣):'確保提供的目標地址與偵聽器使用的地址 中的一個相匹配 - 比較TNSNAMES.ORA條目和合適的LISTENER.ORA文件(或者如果連接要經過交換,則爲 TNSNAV.ORA)。啓動遠程機器上的 監聽器 –

回答

0

如果你不想處理TNS,那麼你可以使用一個Easy Connect string作爲oci_connect()第三個參數,在oci_connect() documentation也提到:

To use the Easy Connect naming method, PHP must be linked with 
Oracle 10g or greater Client libraries. 

The Easy Connect string for Oracle 10g is of the form: 
[//]host_name[:port][/service_name]. 

From Oracle 11g, the syntax is: 
[//]host_name[:port][/service_name][:server_type][/instance_name] 

在你的情況下,它會是這樣的:

//192.168.1.43:1521/hasdrubal