2014-10-04 136 views
2

我想連接php服務器到MS訪問數據庫,我已經嘗試了一切仍然無法連接。PHP的MS Access連接不工作

這裏是我的代碼

<?php 
$conn=odbc_connect('testdb','',''); 
//$conn=odbc_connect("odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};Dbq=C:\wamp\www\test\testdb.accdb", '', ''); 
if (!$conn) { 
    exit("Connection Failed: " . $conn); 
} 

$sql="SELECT * FROM testdb"; 
$rs[]=odbc_exec($conn,$sql); 
if (!$rs) { 
    exit("Error in SQL"); 
} 

while (odbc_fetch_row($rs)) //<-------line 14 
{ 
    $json_output[] = odbc_result($rs, "test"); 
    print(json_encode($json_output)); 

} 
odbc_close($conn); 
?> 

如果我使用

$conn=odbc_connect('testdb','',''); 

然後我得到以下錯誤

Warning: odbc_fetch_row() expects parameter 1 to be resource, array given in C:\wamp\www\test\new 1.php on line 14 

如果我使用

$conn=odbc_connect("odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};Dbq=C:\wamp\www\test\testdb.accdb", '', ''); 

然後我得到下線作爲錯誤。

Warning: odbc_connect(): SQL error: [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified, SQL state IM002 in SQLConnect in C:\wamp\www\test\new 1.php on line 3 

我已經編輯我的php.ini文件以包括ODBC擴展

;extension=php_pdo_mssql.dll 
extension=php_pdo_mysql.dll 
;extension=php_pdo_oci.dll 
extension=php_pdo_odbc.dll <--- here 
;extension=php_pdo_pgsql.dll 
extension=php_pdo_sqlite.dll 
;extension=php_pgsql.dll 

而且我已經下載並從this link安裝Microsoft Access數據庫引擎2010可再發行。

另外我也嘗試了所有顯示in this video

我也完成了這是寫在接受的答案in this link,我在Windows 7 64位上運行64位WampServer版本2.4,也有64位微軟辦公室。

對不起,我的英語不好,我是新的PHP和連接到MS訪問。我已經完成連接到MySQL,但從來沒有訪問。

+0

讓你的腳本'echo(8 * PHP_INT_SIZE)。 「-bit
」;'。結果(「32位」或「64位」)必須與您安裝的Access數據庫引擎的版本相匹配。 – 2014-10-04 14:28:41

+0

它給我32位作爲輸出。它應該是64位? – 2014-10-04 15:33:09

+0

嗯。答案[這裏](http://stackoverflow.com/a/3233881/2144390)表明上述測試*可能會誤導。你可以創建一個。mdb文件進行測試並嘗試使用'Driver = {Microsoft Access Driver(* .mdb)}'(不帶「,* .accdb」)連接到它? – 2014-10-04 15:49:57

回答

3

測試證實,儘管已報告WampServer的64位安裝,但PHP以32位進程運行。舊的「Jet」ODBC驅動程序(Driver={Microsoft Access Driver (*.mdb)})可以成功讀取.mdb文件,並且沒有64位版本的Jet,因此PHP必須以32位運行。

現在,安裝了64位Office的問題是,32位PHP將需要使用新版Access數據庫引擎(又名「ACE」)驅動程序的32位版本來操作.accdb文件,但Microsoft不支持同一臺機器上的32位和64位版本的ACE。 (網絡搜索,就會發現有一種方法來強制這樣的事情發生,但不推薦,因爲它可以明顯地打破辦公室。)

所以,最終的決議將是下列之一:

  • 使用.mdb文件,而不是一個.ACCDB文件,並繼續在32位PHP使用Jet,
  • 發現運行PHP作爲一個64位處理的WAMP設置,或
  • 切換到32位Office版本。
+0

是否有可能獲得64位版本的PHP? – 2014-10-04 16:55:28

+0

@ user3933143這當然是可能的,但主要的PHP下載頁面[這裏](http://windows.php.net/download/)說:「**注意:** x64構建目前**實驗**」 。 (也許這就是爲什麼你首先得到一個32位版本的原因。)還有一個問題,就是如何將另一個版本的PHP「刪除」到現有的WAMP安裝中。不幸的是,我沒有這方面的經驗。 – 2014-10-04 17:18:41

+0

感謝您的幫助。 – 2014-10-04 17:30:42