Ошибка инструкции обновления PHP для unixODBC

Я использую Ubuntu + php + unixodbc + mdbtools для работы с файлом .mdb.
Каждая вещь (соединение + выбор) работает хорошо, но вставляет или обновляет операторы.
Мой код выглядит примерно так:

$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 для segfault.
Я тестирую его с помощью команды isql.Running 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. В этом случае я предлагаю вам запустить ваш PHP-код на компьютере под управлением Windows и использовать COM_DOTNET для управления базой данных Access (через Windows ODBC с использованием ADODB.Connection и связанных объектов).

  2. Если ваш PHP-код на Linux является жестким требованием, тогда есть сильный аргумент для переноса ваших данных из Access .mdb в другую базу данных, которая лучше работает с PHP. (MySQL будет одним из наиболее распространенных вариантов.)

  3. Если и 1. и 2. являются жесткими требованиями, возможно, лучшим вариантом может быть перемещение файла .mdb на компьютер Windows и использование ODBTP для управления файлом .mdb из кода PHP, запущенного на машине Linux.

Наконец, я нахожу решение:
mdbtools не может записывать файлы mdb.

В настоящее время MDB Tools поддерживает только чтение для форматов Access 97 (Jet 3) и Access 2000/2002 (Jet 4). В настоящее время поддерживается поддержка записи, и ожидается, что первый разрез будет включен в выпуск 0.6.

Использование простого скомпилированного java-приложения – наше решение.

  1. Создайте простой проект java с библиотекой Jackcess .
  2. Включите параметры CLI для приложения Java и сделайте то, что вы хотите, с файлом mdb.
    • Вы даже можете получить путь к файлу mdb с параметрами CLI.
  3. Компилировать java-проект.
  4. В PHP вы можете использовать exec('cd path/to/javaproject;java -cp . YourJavaProject "mdbfilepath" "insert|update|or select"',$output);