Драйвер MDBTools не работает должным образом на типах данных памятки MS Acess - PullRequest
2 голосов
/ 25 апреля 2019

Я пытаюсь прочитать отформатированные базы данных MS Access после загрузки их на сервер, чтобы сохранить данные в нем на сервере MySQL.База данных содержит тип данных memo, который при использовании unixODBC с MDBTools и PDO не был доступен для чтения.

У меня PHP 7.2.17-1, работающий на сервере ubuntu18.04.1 с установленным unixODBC, и библиотека PDO запущена и работает из-заневозможно прочитать типы данных memo, я взял предложение отсюда и вместо использования класса PDO при манипулировании базой данных доступа я использовал функции ODBC для выполнения этой работы.Он работал до такой степени, что отображал усеченные значения, но не отображал правильный текст, а также преобразовывал числа в плавающие значения.

Пример:

Ранее мой код выглядел так с использованиемКласс PDO, который не извлекал типы данных памятки.

<code>$query = 'SELECT * FROM Product';
$mdb_file = '/var/www/html/azam/Product.mdb';
$driver = 'MDBTools';
$dataSourceName = "odbc:Driver=$driver;DBQ=$mdb_file;";
$connection = new PDO($dataSourceName);
$result = $connection->query($query)->fetchAll(\PDO::FETCH_ASSOC);
print '<pre>';
print_r($result);   
print '
'

Я использую функции ODBC Now, которые извлекают усеченные значения типов данных памятки и преобразовали числа в плавающее, добавляя нескольконули перед десятичным значением.

<code>$query = 'SELECT * FROM Product';
$mdb_file = '/var/www/html/azam/Product.mdb';
$connection = odbc_connect("Product.mdb","",""); 
$result = odbc_exec($connection,$query);
while($row = odbc_fetch_array($result))
{   echo "<pre>";
    print_r($row);
    echo "
";}

PS: я настроил odbc.ini как , предложил и попытался привести столбец запроса к varchar (200), которая выдает ошибку при установлении соединения, что, вероятно, не поддерживается в этом сценарии.

Я ожидаю, что функции ODBC вернут полную строку типа данных памятки, но она отображает усеченные значения, а также числовые данныетип, который будет возвращен как число, а не как число с плавающей запятой.

...