Я использую 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 работать надежно. Я несколько раз пробовал, и, несмотря на все мои усилия, был неудачным.
Мои рекомендации:
Если поддерживать ваши данные в файле Access .mdb является жестким требованием, то следует предположить, что в проект задействованы компьютеры Windows. В этом случае я предлагаю вам запустить ваш PHP-код на компьютере под управлением Windows и использовать COM_DOTNET для управления базой данных Access (через Windows ODBC с использованием ADODB.Connection
и связанных объектов).
Если ваш PHP-код на Linux является жестким требованием, тогда есть сильный аргумент для переноса ваших данных из Access .mdb в другую базу данных, которая лучше работает с PHP. (MySQL будет одним из наиболее распространенных вариантов.)
Если и 1. и 2. являются жесткими требованиями, возможно, лучшим вариантом может быть перемещение файла .mdb на компьютер Windows и использование ODBTP для управления файлом .mdb из кода PHP, запущенного на машине Linux.
Наконец, я нахожу решение:
mdbtools не может записывать файлы mdb.
В настоящее время MDB Tools поддерживает только чтение для форматов Access 97 (Jet 3) и Access 2000/2002 (Jet 4). В настоящее время поддерживается поддержка записи, и ожидается, что первый разрез будет включен в выпуск 0.6.
Использование простого скомпилированного java-приложения – наше решение.
exec('cd path/to/javaproject;java -cp . YourJavaProject "mdbfilepath" "insert|update|or select"',$output);