unixODBC PHP更新声明错误

问题描述:

我使用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操作系统上,该项目工作正确。 –

最后我找到一个解决方案:
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);

就个人而言,我不会花大量时间试图让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文件。 –