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
我应该如何解决这个错误? 谢谢全部
最后我找到一个解决方案:
mdbtools不能写又MDB文件。
MDB Tools目前对Access 97(Jet 3)和 Access 2000/2002(Jet 4)格式具有只读支持。当前正在编写支持 ,第一次剪辑预计将包含在0.6 版本中。
我们的解决方案使用简单编译的Java应用程序。
- 用Jackcess库创建一个简单的java项目。
- 为java应用程序启用CLI参数,并使用 mdb文件做你想做的事情。
- 您甚至可以通过CLI参数获取mdb文件路径。
- 编译java项目。
- 在PHP中您可以使用
exec('cd path/to/javaproject;java -cp . YourJavaProject "mdbfilepath" "insert|update|or select"',$output);
就个人而言,我不会花大量时间试图让PHP + mdb_tools + unixODBC可靠地一起工作。尽管我尽了最大的努力,但我曾多次尝试过,并且相当不成功。
我的建议是:
如果在Access .mdb文件维护您的数据是一个坚定的要求,那么我们必须假设Windows机器都参与了该项目。在这种情况下,我建议您在Windows机器上运行您的PHP代码,并使用COM_DOTNET来操作Access数据库(通过使用
ADODB.Connection
和相关对象的Windows ODBC)。如果在Linux上运行您的PHP代码是一个严格的要求,那么将您的数据从Access .mdb移动到其他可以更好地与PHP配合使用的数据库是一个很好的例子。 (MySQL将是更常见的选择之一)
如果1.和2.都是固定要求,那么最好的选择可能是将.mdb文件移动到Windows机器并使用ODBTP来操纵.mdb文件来自运行在Linux机器上的PHP代码。
Thanks.But所有三个选项都有一个限制。我之前尝试过ODBTP并且工作正常,但是在这种情况下我无法使用它。当然,我们在我们的项目中使用了mysql,但我们也需要生成mdb文件。 –
当你运行“更新区设定ShahrCode = 99”,当你打开内访问windows操作系统中的.mdb文件,它的工作或你得到一个类似的错误? – hakre
不,在Windows操作系统上,该项目工作正确。 –