2012-02-01 63 views
3

我想配置我的本地WAMP服務器和我有的Oracle 11.1.0.7之間的簡單連接。顯然PHP有各種各樣的解決方案和魔法的情況下,它無法啓動。Oracle 11.1.0.7和WAMP oci_connect失敗

,我從WAMP最新的32位版本(我今天再次得到它只是爲了檢查) 的數據庫機器也是32位,而不是本地

這裏有我在連接到數據庫,每次我嘗試得到了同樣的錯誤:

$db = "(DESCRIPTION=(ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = some.ip.addr)(PORT = 1521)))(CONNECT_DATA=(SID=somesid)))"; 
    //$link = oci_connect('sqlmap', 'sqlmap', 'some.ip.addr') OR die('oci_connect' . print_r(oci_error())); 
    //$link = oci_connect('sqlmap', 'sqlmap', $db) OR die('oci_connect error' . print_r(oci_error())); 
    //$link = oci_connect('sqlmap','sqlmap', 'some.ip.addr/somesid') or die('<= oci_connect ' . print_r(oci_error())); 
    //$link = oci_connect('sqlmap','sqlmap', '//some.ip.addr/somesid') or die('<= oci_connect ' . print_r(oci_error())); 
    $link = oci_connect('sqlmap','sqlmap', '//some.ip.addr/somesid'); 

Warning: oci_connect() [function.oci-connect]: ORA-24315: illegal attribute type in 


Array ([code] => 24315 [message] => ORA-24315: illegal attribute type [offset] => 0 [sqltext] =>) oci_connect1 

關於OCI

OCI8 Support enabled 
Version 1.4.7 
Revision $Revision: 321634 $ 
Active Persistent Connections 0 
Active Connections 0 
Oracle Run-time Client Library Version 10.2.0.1.0 
Oracle Instant Client Version 11.2 
Temporary Lob support enabled 
Collections support enabled 

Directive Local Value Master Value 
oci8.connection_class no value no value 
oci8.default_prefetch 100 100 
oci8.events Off Off 
oci8.max_persistent -1 -1 
oci8.old_oci_close_semantics Off Off 
oci8.persistent_timeout -1 -1 
oci8.ping_interval 60 60 
oci8.privileged_connect Off Off 
oci8.statement_cache_size 20 20 


Apache Version : 
2.2.21 
PHP Version : 
5.3.9 

一些更多的信息,我會很喜歡,如果任何人都可以暗示我什麼我可能會丟失

+0

至少,語法看起來不錯。什麼是您的PHP和即時客戶端版本? – 2012-02-01 16:25:34

+0

Apache版本: 2.2.21 PHP版本: 5.3.9 – dotdot 2012-02-01 16:29:59

+0

說實話,我不確定你的問題。 PHP二進制文件(至少官方版本)帶有兩個版本的OCI8擴展:「Oracle(10)」和「Oracle(11g)」。您有最新版本的即時客戶端(11.2),因此您可能錯過了「Oracle(11g)」DLL。該WAMP包是否爲您提供了一種選擇PHP擴展的方法? – 2012-02-01 16:54:03

回答

2

看你的配置,你有Oracle客戶端和Oracle即時客戶端安裝了:

Oracle Run-time Client Library Version 10.2.0.1.0 
Oracle Instant Client Version 11.2 

不過,我的經驗是,PHP將只使用一個或其他 - 基本上,首先找到的任何一組庫都會被使用。 由於您可以很好地連接到Oracle 10g,但不能連接到11g,這表明10g客戶端庫比Instant Client庫在路徑中「更高」。

兩個選項,我建議探索:

  1. 安裝完整的Oracle 11g客戶端
  2. 具體改變路徑,以確保即時客戶端庫中找到第一個 - 確保,當然,前提是你正在影響PHP使用的有效路徑,而不僅僅是單獨的上下文中的PATH變量...

我從來沒有真正讓PHP正常使用即時客戶端 - 我放棄並安裝了完整的客戶端 - 所以我個人的建議是選項1,但如果這在您的環境中不可行,請首先使用PATH。

0
  1. 執行「phpinfo()」;
  2. 在「配置命令」中,您將看到類似於:「--with-pdo-oci = C:\ php-sdk \ oracle \ instantclient10 \ sdk,shared」「--with-oci8 = C:\ php -sdk \ oracle \ instantclient10 \ sdk,共享「」--with-oci8-11g = C:\ php-sdk \ oracle \ instantclient11 \ sdk,共享「...直到現在可以!
  3. 下載Oracle即時客戶端軟件包 - 基本版:運行OCI,OCCI所需的所有文件即使您的Windows爲64位,也可以下載Oracle「Microsoft Windows 32位即時客戶端」和http://www.oracle.com/technetwork/topics/winsoft-085727.html的「SDK」: ,以及JDBC-OCI應用程序:instantclient-basic-win32-11.1.0.7.0.zip「 3.2下載」*即時客戶端軟件包 - SDK:使用Instant Client開發Oracle應用程序的其他頭文件和示例makefile:instantclient-sdk -win32-11.1.0.7.0.zip「 3.4將兩個zip解包到同一個文件夾中,解包後你會在instantclient_11的文件夾中看到SDK;直到這裏OK!
  4. 複製這個文件夾解壓到C:\ WINDOWS \ Syswow64資料\ instantclient_11_1
  5. 創建C:\ PHP-SDK \ ORACLE \ instantclient11,並複製C的含量:\ WINDOWS \ Syswow64資料\ instantclient_11_1到C:\ PHP的SDK \ ORACLE \ instantclient11
  6. 現在,添加到Windows環境變量PATH如下: 「C:\ WINDOWS \ Syswow64資料\ instantclient_11_1」
  7. 最後,開放WAMP並啓用php_oci8_11g擴展
  8. 檢查 「的phpinfo()」再次;有用!爲什麼???由於C:\ wamp \ bin \ php \ php5.3.13 \ ext \ php_oci8_11g.dll或C:\ wamp \ bin \ php \ php5.3.13 \ ext \ php_oci8.dll是32位DLL;進入64位環境,當您的Windows需要32位版本的「Oracle即時客戶端」時,它將尋求進入C:\ Windows \ SysWOW64。