2014-06-21 71 views
1

我使用Ubuntu + php + unixodbc + mdbtools處理.mdb文件。
每件事(連接+選擇)都很好,但插入或更新語句。
我的代碼是這樣的:unixODBC PHP更新聲明錯誤

$mdbConnection = new \PDO("odbc:mdbdriver",$user , $password , array('dbname' =>$FileName)); 
$SelectResult = $mdbConnection->query("Select * from Zone"); 

$UpdateResult = $mdbConnection->query("Update Zone Set ShahrCode = 99"); 

$SelectResult返回正確的結果,但第二個拋出讓Apache段錯誤錯誤的錯誤。
我用isql命令測試它。運行Select語句成功,但Update不是。

#isql mdbdriver 
+---------------------------------------+ 
| Connected!       | 
|          | 
| sql-statement       | 
| help [tablename]      | 
| quit         | 
|          | 
+---------------------------------------+ 
SQL>Update Zone Set ShahrCode = 99 
Error at Line : syntax error near Update 
syntax error near Update 
Got no result for 'Update Zone Set ShahrCode = 99' command 
[08001][unixODBC]Couldn't parse SQL 
[ISQL]ERROR: Could not SQLExecute 

或者

SQL> Update [Zone] Set ShahrCode = 99 
Error at Line : syntax error near Update 
syntax error near Update 
Got no result for 'Update [Zone] Set ShahrCode = 99' command 
[ISQL]ERROR: Could not SQLExecute 

我應該如何解決這個錯誤? 謝謝全部

+0

當你運行「更新區設定ShahrCode = 99」,當你打開內訪問windows操作系統中的.mdb文件,它的工作或你得到一個類似的錯誤? – hakre

+0

不,在Windows操作系統上,該項目工作正確。 –

回答

0

最後我找到一個解決方案:
mdbtools不能寫又MDB文件。

MDB Tools目前對Access 97(Jet 3)和 Access 2000/2002(Jet 4)格式具有隻讀支持。當前正在編寫支持 ,第一次剪輯預計將包含在0.6 版本中。

我們的解決方案使用簡單編譯的Java應用程序。

  1. Jackcess庫創建一個簡單的java項目。
  2. 爲java應用程序啓用CLI參數,並使用 mdb文件做你想做的事情。
    • 您甚至可以通過CLI參數獲取mdb文件路徑。
  3. 編譯java項目。
  4. 在PHP中您可以使用exec('cd path/to/javaproject;java -cp . YourJavaProject "mdbfilepath" "insert|update|or select"',$output);
1

就個人而言,我不會花大量時間試圖讓PHP + mdb_tools + unixODBC可靠地一起工作。儘管我盡了最大的努力,但我曾多次嘗試過,並且相當不成功。

我的建議是:

  1. 如果在Access .mdb文件維護您的數據是一個堅定的要求,那麼我們必須假設Windows機器都參與了該項目。在這種情況下,我建議您在Windows機器上運行您的PHP代碼,並使用COM_DOTNET來操作Access數據庫(通過使用ADODB.Connection和相關對象的Windows ODBC)。

  2. 如果在Linux上運行您的PHP代碼是一個嚴格的要求,那麼將您的數據從Access .mdb移動到其他可以更好地與PHP配合使用的數據庫是一個很好的例子。 (MySQL將是更常見的選擇之一)

  3. 如果1.和2.都是固定要求,那麼最好的選擇可能是將.mdb文件移動到Windows機器並使用ODBTP來操縱.mdb文件來自運行在Linux機器上的PHP代碼。

+0

Thanks.But所有三個選項都有一個限制。我之前嘗試過ODBTP並且工作正常,但是在這種情況下我無法使用它。當然,我們在我們的項目中使用了mysql,但我們也需要生成mdb文件。 –