2016-09-12 53 views
0

我正在努力獲取ODBC連接,但希望在確保設置正確的情況下提供一些幫助。我也希望我可以在編寫PHP代碼來驗證與數據庫的連接正在工作時獲得一些幫助。用於MS Access安裝的ODBC

在Windows Server 2008 R2計算機上,我瀏覽到C:\ Windows \ SysWOW64並運行odbcad32。 (這是我開始感到困惑的地方......我查看的大多數頁面都提供了非常基本的信息。)DB是一個MS Access文件。我選擇哪個選項卡...用戶DSN ...系統DSN ...文件DSN?

一旦我選擇正確的選項卡,我是否正確輸入數據源名稱的任何內容? (例如,即使文件是'it.accdb',我可以將數據源命名爲'Employees'嗎?'Employees.accdb'?還是必須與實際文件名匹配?

最後,將PHP代碼連接到數據庫?該數據庫當前是D:\ Temp \ IT.accdb。我有系統DSN選項卡中的數據源名稱爲'Employees',並指向。DB我試過下面的代碼:

<?php 
$dbName = "Employees"; 

if (!file_exists($dbName)) { 
    die("Could not find database file."); 
} 
$db = new PDO("odbc:DRIVER={Microsoft Access Driver (*.mdb,*.accdb)}; DBQ=$dbName; Uid=; Pwd=;"); 

我試圖改變$ DBNAME是各種各樣的事,但一切我在沒有找到數據庫文件試圖結果

能SOM一個人幫助我呢?

+0

PHP腳本是否與數據庫在同一臺計算機上運行? – ChristianF

+0

實時數據庫位於遠程虛擬服務器(Windows Server 2008 R2)上。我創建了一個測試數據庫,爲了獲得成功的連接,我一直在遷移到不同的位置。如果可能,我寧願將數據庫留在當前位置。但是如果我無法遠程連接它,我會將實時數據庫移動到本地位置。 – egoche

+0

請編輯您的問題以闡明:您的PHP代碼是否會在Access數據庫文件所在的同一臺Windows Server 2008 R2計算機上運行?如果沒有,它會在其他Windows盒子上運行嗎?如果是這樣,PHP代碼是以32位進程還是64位進程的方式運行?看來數據庫文件是.accdb;那是對的嗎? –

回答

0

有兩種方法可以通過網絡訪問ODBC數據源。您可以安裝包含數據庫的網絡驅動器,併爲系統用戶提供對其的讀/寫訪問權限(不是我推薦的);或者使用ODBC brigde,如OpenLink

如果你想將DB移動到與PHP代碼相同的服務器上,那麼我認爲this sitepoint guide應該是有幫助的。

後者是推薦的最簡單的方法。爲此,您需要在包含數據庫的服務器上將ODBC源設置爲「System-DSN」,並將其命名爲任何您喜歡的名稱。 「系統數據庫」應選中「無」,我建議設置用戶名和密碼。然後安裝指向此DSN的ODBC請求代理。
在客戶端設置ODBC客戶端橋,將其配置爲在遠程端使用DSN。然後你需要做的就是在PHP中創建一個像這樣的DSN字符串:

$dsn = "odbc:dsn_name"; 

就是這樣。

請注意,經紀人確實需要小心謹慎地設置,但只要您閱讀指南,它就非常簡單。 OpenLink也有一個試用版,所以你可以確定它是否適合你。要弄清楚你需要哪些部件,他們也有一個Software selection wizard

也有這種軟件的其他提供者,但我只有OpenLink的經驗。

+0

如果這些是這個過程中唯一可用的兩個選項,我更傾向於將數據庫移動到安裝PHP的Web服務器。 (試圖避免爲一個小項目請求資金。)所以......如果我的數據庫與Web/PHP服務器在同一個系統上,我是否認爲我仍然需要ODBC驅動程序設置?如果是這樣,那麼它是否會被設置爲「System-DSN」? – egoche

+0

我在回答中添加了第二段,並提供了一個鏈接,指明您應該如何在同一臺服務器上進行設置。還有一些開源和/或免費的ODBC驅動程序,但由於我們的要求,我沒有看到它們。因爲他們不支持我們的用例。 – ChristianF

+0

謝謝,基督徒。這是我在這個過程中看過的許多頁面中的一個......我會再看一看,仔細看看它。還有一個問題是,當創建ODBC連接時,您需要提供一個數據源名稱,根據我的確定,它不需要與實際文件名稱相同。 (例如,文件名可以是「One.accdb」,但數據源名稱可以是「Two」。我的問題是,您將如何使用PHP代碼?'$ dsn =「odbc:one.accdb」'或'$ dsn =「odbc:two」' – egoche