任務目的:本地windows下PHP連接遠程服務器下的oracle。
必須必須 確定服務器的數據庫版本,如果本地的驅動和對方服務器版本不一致,會導致許多報錯。
已知的oracle版本 分為 32位的10G,11G,13G 64位的10G,11G,13G
我本機是64位的系統,開始就進去誤區,把所有版本的64位下載了一遍,結果 不管你怎么調,本地的驅動就是找不到oci方法。
然后目標定位到32位,32位如果下載錯版本,會報這個錯。
oci_connect(): OCIEnvNlsCreate() failed. There is something wrong with your system - please check that PATH includes the directory with Oracle Instant Client libraries
找對版本后,下載下來,運行成功。
其中我的本地由於是新開的,所以很多配置文件都沒有,導致執行的過程中缺少各種文件,按照報錯缺少的文件逐個去官網(權威點的網站)下載,放到位置可。
具體操作步驟如下:
1.打開php.ini,把extension=php_oci8.dll打開。
2.其中下載oracle包中的oci.dll房到 C盤的sys32?64看你自己的系統是多少位的。
3.把oracle包中的所有文件拷到php擴展文件夾一份,apache的bin目錄一份。
如果還是不行 那就把php的擴展php_oci8.dll也放到sys32里一份,這點不太確定,查了好多資料都這么說,我第一部就放進去了。
其中改了許多環境變量什么的,最后問題解決之后才發覺都沒用,又都刪了。
最后附上php連接oracle的代碼(其中oci_connect中 的SID就是常說的數據庫,但是oracle中好像普遍都叫服務名,你就當成數據庫名理解就行)
$conn = oci_connect('username','password',"(DEscriptION=(ADDRESS=(PROTOCOL =TCP)(HOST=192.168.0.180)(PORT = 1521))(CONNECT_DATA =(SID=toplw)))"); $sql = "select * from table"; $ora_test = oci_parse($conn,$sql); //編譯sql語句 oci_execute($ora_test,OCI_DEFAULT); //執行 echo "<pre>"; while($r=oci_fetch_row($ora_test)) //取回結果 { print_r($r); }