2013-03-27 32 views
3

我想使用php odbc_connect和odbc_exec查詢訪問MDB文件。這個想法是返回一個數組,然後我可以轉換成json。php odbc_exec不工作,除非我首先回聲?

我通過的Apache2在Ubuntu 12.10

這裏運行PHP是我的代碼:

//Connect to the database 
$conn=odbc_connect('stock-test','',''); 

//die if error 
if (!$conn) { 
    die("Connection Failed: " . $conn); 
} 
//SQL query 
$sql = "SELECT * FROM Stk_Items"; 

//This is the print command...see notes below for this 
//print " " 

//Execute SQL query 
$rs=odbc_exec($conn,$sql); 

//If no result, there is an error in the SQL 
if (!$rs) { 
    exit("Error in SQL"); 
} 

//Create an array to contain the results... 
$arr = array(); 

//Loop through the results, pushing each array to the $arr array 
while ($row = odbc_fetch_array($rs)) { 
    array_push($arr, $row); 
} 

print json_encode($arr); 


odbc_close($conn); 

現在這裏是奇怪的事情。如果在發出odbc_exec命令之前打印一個空格(或任何其他字符),此代碼將僅輸出json(我在上面的代碼中已註釋掉命令)

我也運行了其他幾個測試(回顯結果等),但沒有人會工作,除非我在odbc_exec命令之前打印一些空格。

我錯過了一些明顯的東西嗎?

回答

0

你描述的聲音聽起來像一個阿帕奇怪癖我。如果您正在使用Web瀏覽器來觸發PHP腳本並檢查結果,那麼您應該至少在輸出之前至少輸出<html><body>。如果你想以合理的形式看到結果,你也應該回應一個<pre>標籤。

FWIW,我從命令行運行你的代碼,它對我來說工作得很好。

編輯:

而且到下面的評論,這的確看起來像Apache2的時候調用使用odbc_exec() PHP腳本的怪胎。爲了測試,我創建了下面的 「頁面」 我的Ubuntu 12.04 LAMP服務器上...

<?php 
$arr = array(
    array('ID' => 1, 'text' => 'foo'), 
    array('ID' => 2, 'text' => 'bar'), 
    array('ID' => 3, 'text' => 'baz') 
    ); 
print json_encode($arr); 

...和Firefox沒有顯示JSON字符串如下...

[{ 「ID」 :1,「text」:「foo」},{「ID」:2,「text」:「bar」},{「ID」:3,「text」:「baz」}]

.. .so apache2沒有問題吐出一個普通的JSON字符串和Firefox沒有問題顯示它。

+0

良好的通話!我一直在使用不同的方法來連接以檢索具有類似結果的json,但我並不認爲要將apache排除在等式之外。我從命令行運行它,它也適用於我。我有其他類似的PHP腳本查詢MySQL和MSSQL,這些運行良好。看起來像一個odbc_exec觸發的apache2錯誤。 – 2013-03-27 11:09:17

+0

我還應該補充說我通常會添加html和body標籤,但我只想爲jQuery調用檢索JSON。打印空白字符似乎暫時將其付諸行動,所以我現在就要做。 – 2013-03-27 11:13:46

+0

@RichardGreen事實上,您可以從命令行運行腳本並查看輸出,這表明'odbc_exec()'可以正常工作,但是除非您回顯空格,否則您不能*在瀏覽器窗口中查看結果第一。這更可能是由於您發送給瀏覽器的內容不是有效的HTML,因此瀏覽器可能不會按照您的想法(希望)行事。 – 2013-03-27 11:25:29

2

我設置了一臺虛擬機,並重新從頭開始重新安裝,以查看新版本中是否存在問題。事實並非如此,它讓我相信在現場機器上構建Apache時存在問題。在過去的幾天中,我通過存儲庫刪除並添加了Apache,並通過apt-get添加了所有最新的更新,現在問題似乎得到解決 - 由於最新的更新通常會被應用,所以我非常沮喪,因此我只能想象出必須具備的東西最初安裝apache2或php5-odbc出錯了。

+0

+1爲調查工作和後續在這裏。我要檢查的一件事(爲了好奇,如果沒有其他的話)將檢查每個服務器的'phpinfo()'結果,看看是否在麻煩的服務器上安裝了任何apache2'mod_'或PHP擴展從乾淨的安裝。 – 2013-04-05 11:11:56