Скрещиваем MS Access и PHP (mdb + php)

06.04.2007

Итак. Пускай нам дан файл “xxx.mdb”, в котором для определенности создана таблица “arbuz” с полями ID и NAME. И нам требуется в браузере красиво нарисовать все это дело, считать и вставить данные.

Сама по себе эта вещь может пригодиться во всяких государственных учреждениях, где стоит какой-нибудь веб-сервер (пускай даже IIS, о нем отдельно) и никто не хочет ставить серьезную СУБД, а все хранится в mdb-файлах. Не хотят ставить – либо потому что правда не хотят, либо вышестоящие организации запрещают. Ну и пусть запрещают. Главное что выход есть, и этот выход – ODBC.

Я предположу, что у вас уже стоит веб-сервер и php настроен на работу с ним. По умолчанию PHP уже поставляется с библиотекой для поддержки ODBC скомпилированной вместе с ним, поэтому заморачиваться с установкой чего-нибудь, вроде php_odbc.dll, нам не нужно.

В заголовке самой главной функции, которая нас будет интересовать сегодня сильнее других – odbc_connect прописаны следующие параметры:

odbc_connect ( string dsn, string user, string password)

И если с user/password все более-менее понятно (в случае с mdb-файлом их можно смело оставлять пустыми), то слово “dsn” может вызвать некоторые проблемы. Но все просто – DSN – это некая строка, однозначно идентифицирующая ресурс-источник данных. С английского переводится как Data Source Name. Итак – дело за тем, что бы эту самую строку сформировать.

Для создания DSN-источника нужно проделать следующую, не сильно напрягающую последовательность действий:

Пуск >>> Настройка >>> Панель управления >>> Администрирование >>> Источники данных (ODBC)

Открываем вкладочку “System DSN” и нажимаем кнопку “Add”, которая находится справа. Среди предложенных типов драйверов выбираем наш – Microsoft Access Driver (*.mdb). После подтверждения типа драйвера мы и должны ввести наш заветный DSN в самое верхнее поле – “Имя источника данных”. Пускай это будет “xxx_mdb”. После ввода имени нажимаем на самую левую кнопочку “Выбрать ...” и в ней опеределяем путь к mdb-файлу. Как только файл нашли (а диалог выбора файла там странный, я уже отвык от такого) – нажимаем OK. Мы создали наш DSN.

Ну а дальше запускаем свой любимый PHP-редактор и набираем примерно следующий код:

$conn = odbc_connect (“xxx_mdb”,”“,”“);
$ret = odbc_exec($conn,“SELECT * FROM arbuz”);
//тут можно в цикле, но я обойдусь без него
$O = odbc_fetch_object($ret);
echo $O->ID.$O->NAME;

Естественно, в базе что-то уже должно быть, что бы можно было вот так смело выводить данные безо всяких проверок.

Обещанное замечение насчет IIS. Как и все продукты майкрософта, IIS отличается некоторой странностью поведения, и если ваш скрипт будет ругаться на то, что мол файл уже открыт для эксклюзивного доступа кем-то другим, а вы извините идите-ка со своим запросом куда подальше, хотя вы точно знаете, что никто с ним не работает – знайте, во всем виноваты права на директорию, в которой лежит mdb-файл, сильно рекомендуется их очень-очень расширить, например дав псевдо-группе “Все” полный доступ к этой папке.

На этом статья заканчивается, и начинаются ваши суровые трудовые будни по скрещению Access и PHP. Удачи в вашей борьбе.


Комментирование этой статьи закрыто

Комментарии [5]

  1. Июн 9, 18:57 , Балотный кролег

    То что ты тут написал – это мейнстрим, везде об этом пишут. Ты бы лучше написал как PHP+ODBC+MS SQL Server 2005. С аксесом – фигня, а вот с MS SQL Server – совсем другая маза. У меня с аксессом получилось, а с MS SQL не конектицца, хотя все вроде написано чин-чинарем и ODBC строится и нормально тестируется

  2. Июн 9, 20:38 , Dead Krolik

    Ну. Я например с ораклом скрещивал. А вот с MS не доводилось.

  3. Авг 29, 19:24 , viad

    А мне как-то была поставлена задача разработать систему на PHP+MySQL, ранее полностью управляемую через акцесс. Причем БД в новой системе должна была иметь новую структуру, а все данные из Access должны были быть перенесены туда. Выход напрашивался один – сконвертить БД акцесса в sql-файл для Mysql и написать скрипт перекодировки структуры таблиц. Скрипт довольно тривиален, а вот с конвертацией пришлось помучиться, т.к. триал-версии софта для этого дела разрешали переносить максимум 50 записей из каждой таблицы. А всего записей было несколько тысяч. Почувствовал себя работником конвейера :)

  4. Мар 13, 14:20 , Wolfis

    А ещё лучше написать как их скрестить под линукс=)

  5. Июн 30, 01:58 , Hackrus

    Можно и так скрестить, правда локально)))

    $conn = new ADODB.Connection”">COM;
    $conn->Open(“DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=C:\\WebServers\\test.mdb”);

Комментирование этой статьи закрыто

Кто я


Возраст: 23
Профессия: заяц


Категории


Полезные ссылки


Стишок

Зайчик-зайчик, скок-поскок!
Н-нна тебе дробину в бок!
Не с капустой же мы будем
Жрать на Новый год пирог...

eu-shestakov.livejournal.com