Как связать access php

Обновлено: 02.05.2024

У моего предыдущего клиента была база данных о продуктах, которые они продают, и которые они использовали в автономном режиме. Но все чаще это рабочее соглашение оказывалось ограниченным. Было слишком много случаев, когда им нужно было использовать базу данных, но они находились не рядом с компьютером, где они хранили свою базу данных.

Разве для них не было бы лучше поддерживать свою базу данных, где бы они ни находились? Конечно, но как? Просто – выложи это онлайн. Кроме того, наличие базы данных о продуктах в Интернете открывает возможность использования ее в качестве основы веб-сайта для их бизнеса.

Есть еще одно преимущество в наличии онлайновой базы данных, но это немаловажно – многопользовательский доступ. То есть хранение базы данных на сервере означает, что любое уполномоченное лицо может использовать базу данных продуктов компании, используя только браузер. И все это в результате перемещения существующего файла базы данных Access из автономного в онлайн-хранилище.

Чтобы упростить переход к онлайн-базам данных, существующую базу данных Access можно сохранить без изменений и просто загрузить на подходящий хост Windows. (Хостинг для Linux тоже возможен, но это немного сложнее.) Хостинг сам по себе недостаточен, потому что вам также нужно создать интерфейс, позволяющий им читать и писать в базу данных. Создание интерфейса может показаться сложным, но это не обязательно. По сути, вы будете заменять формы, перечисленные на вкладке «Формы» в Access.

В этой статье я сосредоточусь на основных элементах PHP, которые вам понадобятся для использования существующей базы данных Access в Интернете. Еще один элемент, который является стандартным для установки Windows, – это наличие драйверов ODBC. Они необходимы для использования Access из PHP.

Front-end и Back-end

Прежде всего, давайте выясним, как будет открываться клиентская база данных Access. Обычно они используют Microsoft Access на своем ПК, возможно, дважды щелкнув значок файла базы данных. Однако, когда база данных будет в сети, они будут открывать базу данных в браузере.

Как можно использовать браузер для открытия, просмотра и редактирования базы данных Access? Ну, думайте о приложении MS Access как о пользовательском интерфейсе. Как пользовательский интерфейс, он был разработан для использования в Windows для чтения и записи файла базы данных Access. Помните, что файл базы данных Access полностью отделен от прикладного программного обеспечения MS Access. Таким образом, можно создать альтернативный интерфейс для чтения и записи в файл базы данных Access. Этот просто запускается с помощью веб-браузера.

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

При использовании MS Access на ПК для использования базы данных Access (то есть автономной) прикладное программное обеспечение является .mdb а файл базы данных ( .mdb ) – внутренним. Аналогично, при подключении к Интернету браузер является внешним интерфейсом, а файл базы данных – внутренним. Другими словами, отношения не изменились: они все еще являются отношениями между клиентом и сервером. Внешний интерфейс соединяется с внутренним, а внутренний хранит данные.

База данных

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

База данных Microsoft Access содержит все данные и определения таблиц, относящиеся к этой статье. В соответствии с передовой практикой данные разделяются на отдельные таблицы. Например, список продуктов хранится в таблице product , а список категорий хранится в таблице category . База данных Access является автономной, без ссылок на внешние таблицы.

Многие продукты могут относиться к любой данной категории, и любой данный продукт может относиться к более чем одной категории. Например, если цель базы данных – хранить детали серебряных предметов старины, пару серебряных запонок 19-го века можно отнести к категории 19-го века и Подарки для мужчин.

Эта взаимосвязь между данными показана схематически с помощью опции «Отношения» в Access.


То есть, между продуктами и категориями существует отношение «многие ко многим». Отсюда необходимость таблицы ссылок.

Подключение к базе данных

Перед чтением или записью базы данных необходимо установить соединение с ней. Хосты Windows имеют иерархию папок, аналогичную иерархии ПК с Windows, поэтому расположение файлов на сервере Windows, вероятно, будет иметь путь в форме C:inetpubvhostsexample.comhttpdocs . Вы должны быть в состоянии извлечь значение пути к корневой папке вашего хоста, используя суперглобальный PHP $_SERVER["DOCUMENT_ROOT"] . Код, необходимый для подключения к базе данных Access, будет выглядеть следующим образом:

Если запись для ODBC PDO отсутствует, вам необходимо убедиться, что ваша установка включает расширение PDO и драйверы ODBC. Чтобы сделать это в Windows, раскомментируйте строку extension=php_pdo_odbc.dll в php.ini , перезапустите Apache и попробуйте снова подключиться к базе данных.

При установленном драйвере вывод phpinfo() должен содержать такую ​​информацию:

PDO_ODBC in phpinfo() output

Команды SQL

Четыре основные команды, используемые в PHP, такие же, как в MS Access, а именно SELECT , UPDATE , INSERT и DELETE . Таким образом, следующие примеры SQL должны легко следовать. Если, конечно, вы обычно не используете Access Design View, в котором вам может понадобиться курс повышения квалификации по SQL.

ВЫБЕРИТЕ ряд (ы)

Предположим, вам нужно узнать цену на конкретный продукт. Это легко достигается с помощью идентификатора продукта для выбора одного поля из таблицы product .

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

ОБНОВЛЕНИЕ строки

Используя данные, предоставленные в форме HTML, вы можете обновить информацию о продукте.

Проблемный персонаж, которого следует опасаться, – это апостроф. Апостроф не может быть сохранен в таблице доступа просто как апостроф, скорее он должен быть удален другим апострофом. Это гарантирует, что Access знает, что он должен храниться как апостроф, а не как апостроф, ограничивающий строку. К счастью, библиотека PDO PHP содержит метод, который подготавливает строки для хранения в базе данных, quote() .

Вставить строку

Вы можете добавить новый продукт в таблицу product , используя данные, введенные в форме HTML.

УДАЛИТЬ строку

Если продукт был введен по ошибке или больше не нужен в базе данных, вы можете удалить его из таблицы product .

Можно утверждать, что удаление продукта маловероятно, так как лучше иметь соответствующий статус, чтобы указать, что продукт был продан или был заархивирован, и т. Д. Таким образом, детали будут сохранены для дальнейшего использования.

Резюме

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

Изучая приведенный выше SQL, становится ясно, что для доступа PHP к PHP требовалось всего три команды ODBC PDO, а именно: $db = new PDO() , $db->query() , $db->query() и $db->quote() . Конечно, это самый минимум. Более сложные базы данных и более сложные веб-сайты потребуют больше SQL, чем показано в этой статье, но теперь у вас есть основы для того, чтобы разместить свою собственную – или свою клиентскую – базу данных доступа в Интернете с помощью PHP.

Комментарии к этой статье закрыты. Есть вопрос по PHP? Почему бы не спросить об этом на наших форумах ?

Если Вы планируете создавать свой динамический сайт на платформе Windows, то у Вас скорее всего возникнет задача выбора СУБД для хранения информации (с языком, на котором Вы будете его программировать, судя по всему, вопросов не возникает). Одним из вариантов её решения, может оказаться использование MS Access в качестве SQL-сервера. Далее будет описано, как в скрипте, написанном на PHP, обратиться к базе данных MS Access.

К сожалению, в PHP нет встроенных средств для работы с этой СУБД, что, однако не исключает совместной их работы - для подключения к базе мы будем использовать ODBC.

Первым делом мы должны создать так называемый DSN Source. Для этого (рассматривается вариант, когда у пользователя установлена ОС Windows 2000 Rus) в панели управления мы должны выбрать пункт Администрирование, а затем Источники данных (ODBC). Далее, в появившемся окне (рис.1)


выбираем вкладку системный DSN, нажимаем кнопку добавить, выбираем драйвер MS Access (рис.2)


рис. 2
и нажимаем кнопку готово. В поле ввода имя источника данных пишем имя, по которому впоследствии мы сможем обратиться к нашей базе данных, например, test, затем нажимаем кнопку выбрать и указываем, где у нас на диске находится наш файл с БД (рис. 3)


Затем, если в этом есть необходимость, можем задать имя пользователя и пароль для доступа к БД через ODBC, нажав на кнопку дополнительно (рис. 4)



рис. 4

Теперь, когда у нас есть источник данных ODBC, мы можем воспользоваться функцией odbc_connect для подключения к нашей базе: Чтобы передать запрос в СУБД, мы можем воспользоваться функцией odbc_exec: Если после выполнения этого примера открыть базу test в MS Access, то мы обнаружим, что там появилась новая таблица test с полями f1 и f2 целочисленного и строкового типов соответственно; в таблице будут две записи с данными, которые были указаны в запросе.

f1f2
1qwerty
2asdfgh

Таким образом, теперь, если у Вас возникнет задача подключения к базе MS Access из PHP, Вы смело сможете её решить в кратчайшие сроки.

Этот раздел содержит общие вопросы о связи между PHP и базами данных. Да, сегодня практически любая база данных может быть доступна из PHP.

На Windows машинах, вы просто используете поддержку ODBC и соответствующий ODBC драйвер.

На Unix машинах для доступа к Microsoft SQL серверам вы можете использовать Sybase-CT драйвер, так как они (по крайней мере в основном) совместимы по протоколу. У Sybase есть » бесплатная версия необходимых библиотек для Linux. Для других Unix систем вам необходимо обратиться в Sybase за соответствующими библиотеками. Также смотрите ответ на следующий вопрос.

Могу ли я получить доступ к базам данных Microsoft Access?

Да. Если все полностью выполняется под Windows 9x/Me или NT/2000, то у вас уже есть все необходимые средства, так как для баз данных Microsoft Access вы можете использовать ODBC и драйверы ODBC от Microsoft.

Если вы хотите связать PHP, выполняющийся на Unix, и MS Access на Windows, то вам будут нужны драйверы ODBC для Unix. Такие ODBC драйверы для Unix есть у » OpenLink Software.

Другая возможность - хранить данные на SQL сервере, который имеет ODBC драйверы для Windows, и затем обращаться к этой базе данных из Microsoft Access (используя ODBC) и из PHP (используя встроенные драйверы) или использовать промежуточный формат понятный и для Access, и для PHP, например, простые файлы или базы данных dBase. По этому поводу Тим Хэйз (Tim Hayes) из OpenLink software пишет:

Использование промежуточной базы данных - не очень хорошая идея, когда есть возможность работать с базой данных на прямую из PHP через ODBC, например с драйверами от OpenLink. Если вам все-таки надо использовать промежуточный формат, OpenLink выпустил Virtuoso (механизм виртуальной базы данных) для NT, Linux и других платформ Unix. Пожалуйста, посетите наш » веб-сайт для бесплатной загрузки.

Другой проверенный вариант - использовать MySQL с её MyODBC драйверами на Windows и делать синхронизацию баз данных. Стив Лоренс (Steve Lawrence) пишет:

  • Вы можете создавать ваши таблицы в Access, экспортировать их в MySQL и затем привязать их назад. Это увеличивает скорость создания таблиц.
  • При создании таблиц в Access, вы должны определить первичный ключ, чтобы иметь доступ к таблице по записи. Убедитесь что вы создали первичный ключ в MySQL перед тем как привязать таблицу к Access.
  • Если вы изменяете таблицу в MySQL, то вы должны связать её с Access по-новой. Идите в tools>add-ins>linked table manager, следуйте к вашему ODBC DSN, и выберите оттуда таблицу для пересвязки. Там же вы можете изменить источник вашего dsn, для этого, перед тем как нажать OK, просто пометьте "always prompt for new location" (всегда запрашивать новое местонахождение).

Почему MySQL расширение (ext/mysql), которое я использовал более 10 лет, теперь не рекомендуется использовать? Что я должен использовать вместо него? Как мне обновить свои программы?

Есть три расширения для работы с MySQL, как описано в разделе Выбор MySQL API Старое API не должно использоваться, и когда-нибудь будет помечено как устаревшее и в конце концов удалено из PHP. Так как это расширение очень популярно, то этот процесс будет долгим, но настоятельно рекомендуется писать весь новый код с использованием либо mysqli либо PDO_MySQL.

Скрипты для перехода со старого API пока недоступны, но mysqli API содержит как процедурный так и объектный API, схожие со старым процедурным ext/mysql API.

Нельзя совмещать различные расширения. Поэтому, например передача mysqli соединения в PDO_MySQL или ext/mysql не будет работать.

Клиентские библиотеки MySQL больше не включены в PHP 5, как это отразится на мне? Могу ли я все так же использовать MySQL c PHP? Я пытаюсь работать с MySQL и получаю ошибки "function undefined" (функция не определена), в чём их причина?

Да. PHP всегда будет поддерживать MySQL в том или ином виде. Единственное что изменилось в PHP 5 - это то, что мы больше не поставляем саму клиентскую библиотеку. Вот некоторые причины для этого:

Сегодня клиентские библиотеки уже установлены на большинстве систем.

Учитывая предыдущий пункт, имея несколько версий, проще запутаться. Например, если вы компонуете mod_auth_mysql с одной версией, а PHP с другой, и затем разрешаете оба в Apache, то вы получите хороший жирный крах. Также, поставляемые библиотеки не всегда дружат с установленной серверной версией. Наиболее очевидный симптом этого - разногласие по тому где искать файл mysql.socket (файл Unix сокета).

Также поддержка была вялой и отставала от релизов все больше и больше.

Последующие версии библиотеки будут под GPL и мы не можем поставлять библиотеку под GPL с проектом лицензируемым по типу BSD/Apache. Поэтому полный разрыв в PHP 5 видится как самый лучший вариант.

На самом деле это заденет не так уж много людей. Пользователи Unix, по крайней мере те, кто знает что они делают, всегда были склонны собирать PHP с уже установленной на их системе библиотекой libmesqlclient, просто задав опцию --with-mysql=/usr при сборке. Пользователи Windows могут включить расширение php_mysql.dll внутри php.ini . Более подробную информацию по установке смотрите в документации MySQL. Также убедитесь, что libmysql.dll доступен в системном PATH . О том как - читайте FAQ: установка системного PATH в Windows. Так как libmysql.dll (и многие другие PHP файлы) находится в директории PHP, вам лучше добавить PHP директорию в ваш системный PATH .

Это происходит если вы скомпоновали ваши библиотеки MySQL с pthreads. Проверьте используя ldd. Если это так, скомпилируйте MySQL из исходников или перекомпилируйте исходный rpm, отключив поточный код клиента в файле спецификации. Любой из этих вариантов исправит проблему. Затем перекомпилируйте PHP с новыми библиотеками MySQL.

Почему я получаю ошибки типа "Warning: 0 is not a MySQL result index in on line " или "Warning: Supplied argument is not a valid MySQL result resource in on line ?

Вы пытаетесь использовать идентификатор результата, который равен 0. 0 означает, что ваш запрос не удался по какой-либо причине. Вам необходимо сделать проверку на ошибки, после того как вы послали ваш запрос, и перед тем, как вы пытаетесь использовать возвращенный идентификатор результата. Правильный способ этой реализации выглядит примерно так:

$result = mysql_query ( "SELECT * FROM tables_priv" );
if (! $result ) echo mysql_error ();
exit;
>
?>

$result = mysql_query ( "SELECT * FROM tables_priv" )
or die( "Bad query: " . mysql_error ());
?>

Если Вы планируете создавать свой динамический сайт на платформе Windows, то у Вас скорее всего возникнет задача выбора СУБД для хранения информации (с языком, на котором Вы будете его программировать, судя по всему, вопросов не возникает). Одним из вариантов её решения, может оказаться использование MS Access в качестве SQL-сервера. Далее будет описано, как в скрипте, написанном на PHP, обратиться к базе данных MS Access.

К сожалению, в PHP нет встроенных средств для работы с этой СУБД, что, однако не исключает совместной их работы - для подключения к базе мы будем использовать ODBC.

Первым делом мы должны создать так называемый DSN Source. Для этого (рассматривается вариант, когда у пользователя установлена ОС Windows 2000 Rus) в панели управления мы должны выбрать пункт Администрирование, а затем Источники данных (ODBC). Далее, в появившемся окне (рис.1)


выбираем вкладку системный DSN, нажимаем кнопку добавить, выбираем драйвер MS Access (рис.2)


и нажимаем кнопку готово. В поле ввода имя источника данных пишем имя, по которому впоследствии мы сможем обратиться к нашей базе данных, например, test, затем нажимаем кнопку выбрать и указываем, где у нас на диске находится наш файл с БД (рис. 3)


Затем, если в этом есть необходимость, можем задать имя пользователя и пароль для доступа к БД через ODBC, нажав на кнопку дополнительно (рис. 4)


Теперь, когда у нас есть источник данных ODBC, мы можем воспользоваться функцией odbc_connect для подключения к нашей базе:

Чтобы передать запрос в СУБД, мы можем воспользоваться функцией odbc_exec:

Если после выполнения этого примера открыть базу test в MS Access, то мы обнаружим, что там появилась новая таблица test с полями f1 и f2 целочисленного и строкового типов соответственно; в таблице будут две записи с данными, которые были указаны в запросе.

Результат выполнения этого примера приведён ниже:

Таким образом, теперь, если у Вас возникнет задача подключения к базе MS Access из PHP, Вы смело сможете её решить в кратчайшие сроки.

I am currently faced with a new challenge to develop a site using Microsoft Access as the primary database instead of mysql. I have not used MS Access before and I would like guidiance on how to go about it, I have looked up the w3c website on W3schools but the code gives error

Warning: odbc_connect() [function.odbc-connect]: SQL error: [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified, SQL state IM002 in SQLConnect in C:\Users\NNALI\Desktop\root\test.php on line 2

Warning: odbc_exec() expects parameter 1 to be resource, boolean given in C:\Users\NNALI\Desktop\Breweries\root\test.php on line 4

I am stuck and do not know what to do, I would appreciate all help on this.

Above is the code I used

Do not confuse w3c with w3schools - they are completely different things. Also - show the code you currently have. Looks like PHP can't find the database.

A simpler solution would be to ignore the "requirements" and export the database as CSV and import it into MySQL. I realize that wasn't the question, but PHP handles CSV files natively (e.g. fgetcsv()) and Access is a really annoying database to work with. Also, Microsoft stopped supporting their Access ODBC driver back in 2010.

"Microsoft stopped supporting their Access ODBC driver back in 2010" - That is simply not true. The ODBC driver that ships with the newer Access Database Engine (a.k.a. "ACE") - Microsoft Access Driver (*.mdb, *.accdb) - is a supported product.

I have installed 64 bit Xampp, 64 bit php, 64 bit odbc driver and am trying to use accdb. It doesnt work and the reason why? phpinfo shows ODBC library Win32 So the issue is when using 64 bit code its still loading a 32 bit ODBC driver when we need 64 for accdb.

6 Answers 6

If you are just getting started with a new project then I would suggest that you use PDO instead of the old odbc_exec() approach. Here is a simple example:

NOTE: The above approach is sufficient if you do not need to support Unicode characters above U+00FF . If you do need to support such characters then neither PDO_ODBC nor the old odbc_ functions will work; you'll need to use the solution described in this answer.

I see the problem, I am using USBwebserver, it does not have pdo extension included, so it does not run, i think that is the problem

USBWebserver 8.6 has PDO enabled by default, but only for mysql, pgsql, sqlite . Try going into settings\php.ini and uncommenting the line ;extension=php_pdo_odbc.dll , then restart USBWebserver.

So why not upgrade to 8.6? It's free. (Also, I just tried 8.5 and its PDO_ODBC support is broken. It works fine in 8.6.)

Sorry please, but the apache of the USBwebserver is refusing to go online, I do not know what the problem is I have been working on that since yesterday, I would appreciate any help you can render thanks

@GeorgeJames Strange, 8.6 worked flawlessly for me: I downloaded it, I unzipped it, I ran it, it worked. Do you get any error messages? Anything show up in the log files or in the Windows event viewer?

The problem is a simple typo. You named your variable 'conc' on line 2 but then referenced 'conn' on line 4.

A successful connection will allow SQL commands to be executed from PHP to read or write the database. If, however, you get the error message “PDOException Could not find driver” then it’s likely that the PDO ODBC driver is not installed. Use the phpinfo() function to check your installation for references to PDO.

If an entry for PDO ODBC is not present, you will need to ensure your installation includes the PDO extension and ODBC drivers. To do so on Windows, uncomment the line extension=php_pdo_odbc.dll in php.ini, restart Apache, and then try to connect to the database again.

Читайте также: