unixODBC PHP更新语句错误

我正在使用Ubuntu + php + unixodbc + mdbtools来处理.mdb文件。
每一件事(连接+select)都很好,但插入或更新语句。
我的代码是这样的:

$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命令testing它。运行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 

我应该如何解决这个错误? 谢谢大家

就个人而言,我不会花太多时间试图让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来处理运行在Linux机器上的PHP代码中的.mdb文件。

最后我找到了一个解决方案:
mdbtools还不能写入mdb文件。

MDB工具目前拥有对Access 97(Jet 3)和Access 2000/2002(Jet 4)格式的只读支持。 目前正在编写支持,第一次剪辑预计将包含在0.6版本中。

我们的解决方案使用简单的编译的Java应用

  1. 用Jackcess库创建一个简单的java项目。
  2. 为java应用程序启用CLI params,并用mdb文件做你想做的事情。
    • 您甚至可以使用CLI参数获取mdb文件路径。
  3. 编译java项目。
  4. 在PHP中,你可以使用exec('cd path/to/javaproject;java -cp . YourJavaProject "mdbfilepath" "insert|update|or select"',$output);