ertttert
Работу с 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
.
Этот механизм показан на рис. 5.1.
Если вы используете еще не поддерживаемую СУБД, можете написать собственный драйвер, реализовав функции-оболочки для своей СУБД. Подробнее об этом написано в разделе “Написание собственного драйвера СУБД” в конце данной главы.
Всего комментариев: 0 | |