2014-10-03 102 views
3

我正在使用CentOS 6.5創建一個通過PHP的Microsoft Access .mdb文件的PDO ODBC連接。ODBC PDO返回'沒有收到數據'

我正在使用MDBTools和unixODBC。

我ODBCINST.INI看起來像這樣

[MDBToolsODBC] 
Description=MDBTools Driver 
Driver=/usr/lib64/libmdbodbc.so.0.0.0 
FileUseage=1 
Threading=1 

我ODBC.INI看起來像這樣

[dashboard] 
Description = Dashboard 
Driver = MDBToolsODBC 
Servername = localhost 
Database = /mnt/inetpub/databases/dashboard.mdb 
Username = 
Password = 

我試圖通過PHP像這樣

$db = new PDO("odbc:DRIVER=MDBToolsODBC;DSN=dashboard;"); 

小時後連接獲取錯誤信息,我終於能夠解決所有問題,但現在當我嘗試連接時,Google Chrome說

No data received 
Unable to load the webpage because the server sent no data. 
Error code: ERR_EMPTY_RESPONSE 

我不確定這是否是因爲我的DSN設置。當我做一個isql dashboard我得到

+----------------------------------+ 
| Connected!      | 
|         | 
| sql-statement     | 
| help [tablename]     | 
| quit        | 
|         | 
+----------------------------------+ 

不知道如何去解決這個,因爲這使用任何形式的Linux是我的第一次。

這是我想如何調用數據庫中的信息。

在需要數據庫信息的文件,我用

<?php 
    include("inc/config.php"); 
?> 

註釋掉連接字符串

//$db = new PDO("odbc:DRIVER=MDBToolsODBC;DSN=dashboard;"); 

允許HTML和CSS加載,但當然沒有從數據庫中的數據被上拉。這是什麼讓我覺得有某種連接字符串有問題。

我想執行一個簡單的SQL查詢就像這樣,這是一個比我需要在我的開發中運行和使用的查詢更簡單的查詢,但如果我可以得到像這樣簡單的工作,我可以剩下的。

$problems = $db->prepare("SELECT problems.id FROM problems;"); 
$problems->execute(); 
$result = $problems->fetchColumn(); 
echo $result; 

編輯:我已經確定,有一個「分段錯誤」在我試圖查詢該表。其他表似乎工作正常!

+1

你可以發佈你正在使用以試圖滿足了信息的代碼? – Chad 2014-10-14 20:01:04

+0

@cwscribner我在帖子底部添加了一些附加信息。我相信,這個問題不在於我如何抽取數據的SQL,而在於連接字符串本身,如上所述。謝謝。 – 2014-10-14 22:23:12

+0

你解決了這個問題嗎? – Dimas 2015-03-18 13:27:33

回答

0

我爲您的查詢快速搜索,發現這一點:

http://www.wix.com/support/html5/ugc/1f678e95-c707-45c8-90ca-86a48ee98a38/2d8fe37b-cc02-4582-97da-9a93d5426a55

我想你可能要清除瀏覽器緩存/嘗試不同的瀏覽器。

另一種選擇是通過命令行#php/your/script/path嘗試它,看它是否以這種方式成功運行。

+0

我試過清除緩存,並跨Chrome,Firefox和Internet Explorer。但是,在命令行中運行一個調用連接字符串的文件會導致Line at Error:附近出現語法錯誤(Segmentation Fault)。其中一些文件由於某種原因被剪切掉了,但它有幫助 – 2014-10-14 22:35:08

+0

在檢查另一個文件時,在線顯示Error:syntax.start附近的語法錯誤probems.start是我的SQL查詢的一部分,所以或許我錯誤地認爲它是連接字符串,並且實際上是我的SQL語句 – 2014-10-14 23:19:08

1

數據源的全部要點是您將配置存儲在odbc.ini中。

try{ 
    $db = new PDO("odbc:dashboard"); 
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
} 
catch(PDOException $ex){ 
    echo 'Connection failed: ' . $e->getMessage(); 
    die(var_dump($ex)); 
} 

應該夠了,如果它不工作,你需要得到錯誤,請閱讀錯誤並修復,該命令起作用,所以把用戶名和密碼odbc.ini,並給它一個嘗試


而且用戶名和密碼參數PDO構造,你可以嘗試通過指定連接一切:

try { 
    $db = new PDO("odbc:dashboard", $username, $password, array(
     PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION) 
    ); 
} 
catch(PDOException $ex){ 
    echo 'Connection failed: ' . $e->getMessage(); 
    die(var_dump($ex)); 
} 
+0

應該將用戶名和密碼留空ODBC.INI內如果沒有用戶名和密碼 做上述仍會導致Web瀏覽器說 無法載入網頁,因爲服務器未發送任何數據 錯誤代碼:?ERR_EMPTY_RESPONSE – 2014-10-15 02:37:12

+0

在填寫密碼剛需安全 – meda 2014-10-15 02:43:26

+0

如果我放入不正確的DSN,相應的錯誤消息顯示SQLSTATE [IM002]。如果我放入正確的儀表板,則不顯示PHP錯誤消息,而是顯示瀏覽器錯誤消息。我不知道如何診斷這一點。 – 2014-10-15 02:51:35