Скрещиваем MS Access и PHP (mdb + php)
Итак. Пускай нам дан файл “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]
Июн 9, 14:57 , Балотный кролег
То что ты тут написал – это мейнстрим, везде об этом пишут. Ты бы лучше написал как PHP+ODBC+MS SQL Server 2005. С аксесом – фигня, а вот с MS SQL Server – совсем другая маза. У меня с аксессом получилось, а с MS SQL не конектицца, хотя все вроде написано чин-чинарем и ODBC строится и нормально тестируется
-
Ну. Я например с ораклом скрещивал. А вот с MS не доводилось.
Авг 29, 15:24 , viad
А мне как-то была поставлена задача разработать систему на PHP+MySQL, ранее полностью управляемую через акцесс. Причем БД в новой системе должна была иметь новую структуру, а все данные из Access должны были быть перенесены туда. Выход напрашивался один – сконвертить БД акцесса в sql-файл для Mysql и написать скрипт перекодировки структуры таблиц. Скрипт довольно тривиален, а вот с конвертацией пришлось помучиться, т.к. триал-версии софта для этого дела разрешали переносить максимум 50 записей из каждой таблицы. А всего записей было несколько тысяч. Почувствовал себя работником конвейера :)
Мар 13, 10:20 , Wolfis
А ещё лучше написать как их скрестить под линукс=)
-
Можно и так скрестить, правда локально)))
$conn = new ADODB.Connection”">COM;
$conn->Open(“DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=C:\\WebServers\\test.mdb”);
2008-10-11 3:16 am , Оставьте свой отзыв