Создание веб-сайтов, использующих базу данных, влечет за собой необходимость включения в ваш код вызовов запросов SQL, а затем и необходимость считывания данных. Все было бы хорошо, но в некоторых случаях использование конкретной базы данных влечет за собой возможные сложности в будущем. Например, при необходимости срочно перенести сайт с одного хостинга на другой может возникнуть масса проблем с взаимозаменяемостью различных СУБД хотя бы на уровне вызова конкретных функций PHP. В том случае, если возможность такой миграции не исключена, замена стандартных запросов к базе данных на использование методов специального PHP-класса позволит вам сэкономить массу времени и средств. В статье даются рекомендации по использованию PHP-класса ADODB для работы с базой данных взамен классического линейного решения задачи общения с базой данных.
По уровню документированности и функциональности это решение является одним из самых приемлемых для организации прослойки между базой данных и ядром (набором функций) веб-сайта.
Установка класса
Установка ADODB состоит из следующих этапов:
-
Необходимо скачать сам класс непосредственно из раздела Downloads официального сайта проекта ADODB. Если вы используете операционную систему Microsoft, лучше закачивать архив типа zip (проще развернуть подручными средствами). Для *nix больше подойдет тип tar.gz (имеет меньший размер, чем zip).
-
Далее содержимое этого архива следует развернуть в подкаталог ADODB одной из директорий, прописанных в качестве каталога размещения классов в конфигурации PHP. Местоположение такого каталога — параметр, который указывается в конфигурационном файле php.ini в виде значения параметра include_path. Если вы не имеете доступа к настройкам PHP, то для принятия решения при размещении класса проще всего будет просмотреть содержание вывода функции phpinfo(). Это скорее дело вашего вкуса, поскольку для нормальной работоспособности веб-приложений можно указать и относительное (к текущему скрипту) местоположение класса, но применение стандартных методов сильно облегчит разработку, требующую принятия коллективных решений. Один из таких стандартных методов как раз и заключается в использовании нескольких включаемых директорий. Тем более что такой подход позволяет администратору веб-хостинга при помощи обновления всего одного этого класса фактически обновлять все приложения, которые используют его в качестве интерфейса к базе данных.
Обычно в качестве одного из каталогов, перечисленных в параметре include_path, фигурирует и текущий каталог (символ «точка»). В том случае если вы не имеете доступа ни к одному из каталогов, перечисленных в этом параметре, при подключении класса вам придется использовать абсолютный путь размещения вашего класса.
Содержание архива с ADODB |
Подключение ADODB к вашему скрипту
Для включения возможностей ADODB в вашем PHP-приложении достаточно добавить всего одну строку: require("ADODB/ADODB.inc.php");. В кавычках также можно указывать абсолютный путь, если нет доступа к каталогу include_path.
Изменение типа используемой базы
Когда вы подключаетесь к базе данных, используя обычные функции PHP, ваш код может выглядеть примерно следующим образом:
$db = mysql_connect("localhost", "user", "password");
mysql_select_db("mydb", $db);
Использование же прослойки в виде ADODB позволяет использовать более формализированный подход к подключению:
$db = NewADOConnection("mysql");
$db->Connect("localhost", "user", "password", "mydb");
Тут вы имеете полное право спросить: "Ну и что же тут особенного?" Ситуация становится предельно ясной, если вы представите себе перенос веб-сайта на другой хостинг, где используется база данных MSSQL. При этом необходимо будет как минимум изменить синтаксис оператора подключения к базе данных (не говоря уже обо всех вызовах функций, обрабатывающих запросы к базе данных). Гораздо проще изменить всего один параметр в коде подключения, использующем ADODB:
$db = NewADOConnection("mssql");
Если подключения к базе данных используются в нескольких разделах вашего сайта, достаточно будет вынести создание нового объекта ($db) в функцию. Далее можно поместить эту функцию в файле, который будет доступен в контексте всех скриптов, которые используют подключения к базе данных. Если же в будущем возникнет необходимость перейти на другую базу данных, вам нужно будет всего лишь изменить реквизиты подключения, а не править весь код.
Подключение с помощью строки DSN
Класс ADODB позволяет кроме вызова функции Connect выполнять подключение к базе с помощью DSN-строки (строки в виде URL), в которой содержатся все необходимые для подключения реквизиты. Например, возможен следующий синтаксис команды подключения к базе данных MySQL:
$conn = NewADOConnection("mysql://user:password@localhost/test/");
Подробный синтаксис строк подключения DSN для различных баз расписан в документации по классу, которая находится в файле ./docs/docs-ADODB.htm относительно его установочной директории.
Выборка данных
Если вы сталкивались с разработкой программ, для работы с базами данных в среде Delfi/Kylix вам будет очень знакома концепция доступа к данным, которая используется в этом классе. Это так называемый подход последовательного доступа, который предусматривает наличие методов «Получить следующую запись» или атрибута «Конец файла», необходимых для реализации доступа к строкам с результатами запросов. Сказанное можно продемонстрировать на примере получения набора записей из таблицы one, находящейся в базе данных test. При линейном программировании вы используете следующий синтаксис:
$res = mysql_query("SELECT * FROM test.one");
while ($arr=mysql_fetch_row($res))
{
for ($i=0; $i<count($arr); $i++)
echo "$i> [".$arr[$i]."]\n";
}
В случае использования ADODB вам придется сначала выполнить метод, отправляющий запрос на сервер, а далее последовательно получить строки для такого запроса. Код с применением AADODB будет выглядеть следующим образом:
$db = NewADOConnection("mysql://root:@localhost/test");
$result = $db->Execute("SELECT * FROM one");
while (!$result->EOF)
{
for ($i=0, $max=$result->FieldCount(); $i<$max; $i++)
print $result->fields[$i]." ";
$result->MoveNext();
print "\n";
}
Миграция PHP-скриптов на ADODB
Перевод существующего кода в обертку ADODB позволяет упростить дальнейшую разработку вашей системы. Фактически переход под класс «для базы данных» представляет собой замену всех вызовов функций, которые обращаются напрямую к MySQL, на вызовы методов класса. Кроме того, иногда необходимо будет использовать дополнительные методы (вроде MoveNext). Но в итоге вы сможете достичь большей степени гибкости вашего приложения. Конечно же, само по себе применение оберток вроде ADODB не уберегает вас от полного отсутствия ошибок в вашем коде. Но основные преимущества (читабельность кода и универсальность методов доступа) при условии длительной разработки вашего приложения могут значительно ускорить внесение изменений и дополнительной функциональности.
Достоинства
Можно долго перечислять достоинства ADODB, но список поддерживаемых ею систем управления баз данных сам по себе говорит о многом. Итак, ADODB умеет работать с MySQL, Interbase, Sybase, PostgreSQL, Oracle, Microsoft SQL server, Foxpro ODBC, Access ODBC, Informix, DB2, Sybase SQL Anywhere, generic ODBC and Microsoft's ADO. Это позволяет вам практически произвольно изменять тип хранилища ваших данных, не беспокоясь про то, что веб-сайт будет временно недоступен. Также это дает возможность делать кросс-платформенные приложения. Кроме того, внутренняя структура ADODB позволяет подключать и любую другую, не приведенную в этом списке SQL базу данных с помощью механизма драйверов.
Сообщения про ошибки
ADODB позволяет уменьшить влияние ошибок в ваших SQL-запросах на общий уровень защищенности сайта также благодаря возможности скрытия сообщений про ошибки. Кроме того, класс предлагает возможности для локализации своих сообщений про некорректно выполненные операции.
Обеспечение надежности
Использование классов-оболочек позволяет выделить в общей концепции вашего приложения такие задачи, как обеспечение надежности вашего приложения, в плане ограничения доступа посетителей вашего веб-сайта к данным. Если вы используете «линейное» обращение к базе данных, вы можете разве что зафиксировать все запросы в лог-файле. И это только в том случае, если вы имеете необходимые административные пары. Классы-оболочки вроде ADODB позволяют ограничить исполнение нежелательных SQL-запросов. Например, если вы точно знаете, что сайт должен только предоставлять данные посетителям, вполне можно ограничить все множество запросов только SELECT. Проще всего это сделать, создав класс, наследующий способности ADODB, или введя необходимые изменения в сам код класса (именно необходимого вам драйвера).
Конфиденциальность доступа
В том случае если вы не хотите раскрыть ваши реквизиты подключения к базе данных, а намерены пригласить консультанта или вести групповую разработку веб-приложения, достаточно прописать создание объекта класса ADODB в самом скрипте ADODB.inc.php либо с помощью DSN, либо вызовом функции Connect.
Выводы
Конечно, за унификацию доступа к различным базам данных нужно будет заплатить временем, потраченным на переработку уже существующего кода. В том же случае, когда разработка веб-сайта происходит с чистого листа, использование такого механизма доступа к базе данных, как ADODB, позволяет в дальнейшем значительно ваше время и средства заказчика.
Ссылки по теме
Статья получена: hostinfo.ru