Підключаємося до Access .MDB із PHP на Linux Debian

ms-access-mdbБуває так, що дані, що нам потрібні, лежать в базі даних формату Microsoft Access .MDB. Це файл, з розширенням .mdb. Він розрахований для безпроблемного доступу на платформі Windows та IIS, у нас же Linux Debian та Apache, але здаватися ми не збираємося.
УВАГА! Не вирішена проблема з кодовою сторінкою! Докладніше в кінці статті.

Спочатку необхідно перевірити середовище на предмет підтримки ODBC, далі встановити і сконфігурувати необхідні компоненти. Теоритично ми мали б змогу конектитись до будь-якого файлу (бази) .mdb, але практично функціонал працює лише через сокети (не правильна назва, правильно DSN, але тут називатимемо сокети).

Спочатку перевіряємо, чи є у нас підтримка ODBC.

php -i | grep PDO

Якщо бачимо “PDO drivers => mysql, odbc” то все чудово, наступний крок (команду) пропускаємо.

apt-get update
apt-get install php5-odbc
apt-get install libmdbodbc

Це ми встановили (оновили) libmdbodbc.

Встановлюємо MBDtools. Можна пробувати без встановлення пакету – пропустивши цей крок. Якщо не вдається – ставимо:

apt-get install mdbtools

Правимо (створюємо) файл /etc/odbcinst.ini і вписуємо туди таке:

[MDBTools]
Description = MDBTools Driver
Driver      = /usr/lib/libmdbodbc.so.0
Setup       = /usr/lib/libmdbodbc.so.0
FileUsage   = 1
UsageCount  = 1

Це ми конфігуруємо драйвер. В принципі це необхідно для конектів для довільної бази .MDB. Далі піде мова про сокети (бо довільний конект не прцює), тому можливо цей крок не обов’язковий.

Правимо (створюємо) файл /etc/odbc.ini і вписуємо туди таке:

[debian.ukr.im]
Description = Debian.Ukr.IM MS Access MDB
Driver = /usr/lib/libmdbodbc.so.0
Database = /var/www/debian.ukr.im/debian.ukr.im.mdb

Значення заміняємо логічно. Це ми створюємо такий собі сокет (DSN) з назвою debian.ukr.im для конекту до цієї бази за сокетом. Інакше не працює. Має працювати довільне під’єднання, але не працює – лише через сокети. На публічному сервері бажано базу захистити паролем, інакше всі хто знає ім’я сокета можуть отримати доступ до бази.

Тепер в PHP доступаємося до даних:

$connection = new \PDO(‘odbc:debian.ukr.im‘);
$query = ‘SELECT * FROM TableName’;
$result = $connection->query($query)->fetchAll(\PDO::FETCH_ASSOC);
print_r($result);

Все класно, але з кодовою сторінкою халепа, і схоже всім до лампочки.

$connection->exec(‘SET NAMES utf8′);
$connection->exec(‘SET CHARACTER utf8′);

нічого не дає, усілякі:

Charset = utf8
client charset = utf8
clientcharset = utf8
client_charset = utf8
Servercharset = utf8

в /etc/odbc.ini теж без дії. Варіанти з cp866 та  cp1251 теж не працюють.

Рішення – перегнати .mdb -> MySQL за допомогою Bullzip MS Access to MySQL. Велике дякую розробникам за фріварну версію. З дефолтними установками utf8 в Bullzip та PhpMyAdmin дані мігрують чудово.

Напишіть відгук

Ваша пошт@ не публікуватиметься. Обов’язкові поля позначені *

* Copy This Password *

* Type Or Paste Password Here *

Можна використовувати XHTML теґи та атрибути: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>