ertttert
Books-CMS.clan.su

Уровень абстракции баз данных

Работу с API-интерфейсом абстракции баз данных можно полностью оценить, только попробовав отказаться от него. Были ли у вас проекты, где требовалось изменить СУБД, и вы целыми днями просматривали код, чтобы модифицировать в нем вызовы функций и запросы, специфичные для конкретной СУБД? Работа с уровнем абстракции позволяет не задумываться о различиях в именах функций для различных СУБД, а также о совместимости запросов с ANSI SQL — т.е. вам не придется писать различные запросы для различных СУБД. Например, вместо вызова mysql_query() или pg_query() в Drupal используется db_query(), который позволяет не обращать внимания в бизнес-логике на нюансы конкретной СУБД.

Уровень абстракции баз данных в Drupal 7 основан на библиотеке объектов данных PHP ( PHP Data Object — PDO) и служит двум основным целям. Во-первых, код не привязывается ни к какой конкретной СУБД. Во-вторых, выполняется очистка вводимых пользователем данных, которые заносятся в запросы, чтобы избежать атак внедрением SQL. В основе этого уровня лежит принцип, что написание SQL удобнее, чем изучение языка работы с новой СУБД.

В Drupal также имеется API-интерфейс схемы, который позволяет обобщенным образом описать схему базы данных (т.е. таблицы и поля) и возложить на Drupal перевод этой схемы в конкретные детали используемой СУБД. Более подробно об этом пойдет речь при рассмотрении файлов .install.

Drupal определяет тип СУБД, к которой надо подключиться, с помощью данных из массива $database в файле settings.php. Например, если элемент $databases['default']['default']['driver'] содержит значение mysql, то Drupal включит файл includes/database.mysql.inc. Если это значение равно pgsql, Drupal включит файл includes/database.pgsql.inc, а в случае sqlite будет включен файл includes/database.sqlite.inc.

drupal

Этот механизм показан на рис. 5.1.

Если вы используете еще не поддерживаемую СУБД, можете написать собственный драйвер, реализовав функции-оболочки для своей СУБД. Подробнее об этом написано в разделе “Написание собственного драйвера СУБД” в конце данной главы.

Всего комментариев: 0
Имя *:
Email *:
Код *:


Бесплатный конструктор сайтов - uCoz