Создание базы данных

Для целей этого приложения мы должны хранить следующую информацию:
■ lists (списки) — списки рассылки, доступные для подписки.
■ subscribers (подписчики) — пользователи системы и их предпочтения.
■ sub_lists (списки, на которые совершена подписка) — информация о списках, на которые подписались пользователи (отношение типа “многие ко многим”).
■ mail (сообщения электронной почты) — информация об отправленных сообщениях электронной почты.
■ images (изображения) — поскольку необходимо располагать возможностью отправки сообщений электронной почты, состоящих из нескольких файлов (то есть текста, HTML-кода и набора изображений), требуется также отслеживать, какие изображения отправляются с каждым почтовым сообщением.
SQL-код, с помощью которого создается эта база данных, показан в листинге 30.1.
Затем с помощью метода isError () мы проверяем наличие ошибки при установке соединения, и, если ошибка произошла, выводим сообщение об ошибке и осуществляем выход:
if (DB::isError($db)) {
echo $db->getMessage(); exit ;
}
Далее, при условии, что все было выполнено правильно, мы настраиваем запрос и выполняем его:
$result = $db->query($query);
Мы можем проверить количество возвращенных строк: $num_results = $result->numRows();
Извлечение каждой строки выполняется следующим образом: $row = $result->fetchRow(DB_FETCHMODE_ASSOC);
Обобщенный метод fetchRow() позволяет осуществлять выбор строки во множестве различных форматов — параметр DB_FETCHMODE_ASSOC показывает, что строк) желательно вернуть в виде ассоциативного массива.
После вывода возвращенных строк сценарий завершается закрытием соединения с базой данных:
$db->disconnect();
Как видите, этот обобщенный пример во многом похож на первый сценарий.
Преимущество использования DB состоит в том, что нужно запомнить только один набор функций работы с базой данных, и, если придется изменить программное обеспечение базы данных, код потребует лишь минимальных изменений.
Поскольку эта книга посвящена MySQL, для увеличения скорости работы и гибкости мы будем пользоваться встроенными библиотеками MySQL. Тем не менее, в реальных проектах может потребоваться использовать пакет DB, поскольку в ряде случаев подобный уровень абстракции оказывается буквально незаменимым.