23.3. Хранение содержимого в базе данных
Информация, сохраненная в базе данных, не ограничивается только короткими строками наподобие 32-символьного названия товара из листинга 23.3. Есть возможность создать большие логические объекты (blob) размером 64 Кбайт, которых достаточно для Web-страниц больших размеров. Преимуществом такого подхода является то, что страницы существуют в хорошо структурированной среде. Их можно идентифицировать с помощью чисел, и связи с ними должны осуществляться с использованием только этих чисел. Недостатком является то, что у разработчика нет возможности воспользоваться любимым текстовым редактором, поскольку информация теперь располагается в базе данных. Поэтому приходится балансировать между затратами и преимуществами, и некоторым Web-узлам совсем не надо, чтобы все его компоненты хранились в базе данных.
Ситуация, когда этот метод можно использовать на практике, - размещение в базе данных содержимого электронной доски объявлений (Bulletin Board System, BBS). Эта система хранит сообщения, которые не являются просто Web-страницами. Каждая из страниц снабжена своим собственным заголовком, на ней указано время создания и приводится информация об авторе. Каждая структура может быть удобно запакована в таблицу базы данных. Кроме того, если каждому сообщению может быть присвоен уникальный идентификатор, он позволяет организовать сообщения в деревьях "родитель-потомок". Пользователь может создавать новую дискуссионную ветвь, которая порождает множество других сообщений. Сообщения могут создаваться в иерархической структуре, позволяющей осуществлять просмотр.
Как и в любом случае с системами, работающими с базами данных, первым шагом является создание таблицы. В листинге 23.7 показано, как создается таблица для хранения сообщений. Каждое сообщение снабжается заголовком, в нем также указывается имя того, кто разместил сообщение, когда сообщение было размещено, и тело самого сообщения. Начальный идентификатор может иметь значение NULL. Это свидетельствует о том, что сообщение является началом темы или потока сообщений. Тело сообщения не обязательно должно быть представлено простым текстом, оно может содержать и HTML-код. Таким образом, пользователи с помощью своих браузеров смогут создавать собственные Web-страницы.
| Листинг 23.7. Создание таблицы message
CREATE TABLE Message
(
ID INT NOT NULL AUTO_INCREMENT,
Title VARCHAR(64),
Poster VARCHAR(64),
Created DATETIME,
Parent INT,
Body BLOB,
PRIMARY KEY(ID)
);
Сценарий, приведенный в листинге 23.8, имеет два рабочих режима: отображение перечней заголовков сообщений и отображение целого сообщения. Если переменной messageID не задано значение, сценарий отображает список всех сообщений в системе, организованных потоком, вызвав функцию showMessages (см. главу 4, "Функции"). Функция showMessages для перехода на любую ветвь дерева сообщений использует механизм рекурсии. Просмотр начинается с перечня всех сообщений, находящихся на верхнем уровне. Это сообщения корневого уровня или начало тем. После отображения сообщений корневого уровня функция showMessages вызывается для отображения отдельных тем. Этот процесс продолжается до тех пор, пока не будет найдено сообщение, не имеющее порожденных сообщений. Идентификация помогает понять иерархию сообщений.
Листинг 23.8. Простейшая BBS
<html> <head>
^^^^Листинг 23.8</title>
</head>
<body>
<?php
print("<h1>BBS Леона^!!^^");
//Подключиться к серверу, а затем проверить на ошибку if(!($dbLink = mysql_connect("localhost", "httpd", "")))
{
print("Heвoзмoжнo подключиться к серверу!<br>n");
print("Завершение работы!<brn");
exit();
}
//выбрать базу данных, затем проверить на ошибку if(!($dbResult = mysql_query("USE test", $dbLink)))
{
print("Heвoзмoжнo работать с базой данных test!<BR>n");
print("Завершение работы!<BR>n");
exit();
}
/*
** рекурсивная функция, разбивающая все
** последующие сообщения
*/
function showMessages($parentID)
{
global $dbLink;
$dateToUse = Date("U");
print("<ul>n");
$Query = "SELECT ID, Title, Created " . "FROM bbsMessage " . "WHERE Parent=$parentID " .
"ORDER BY Created ";
if(!($dbResult = mysql_query($Query, $dbLink)))
{
// невозможно выполнить запрос
print("Запрос к таблице bbsMessage невозможен!<br>n"] print("MySQL сообщает: " . mysql_error() . "<br>n");
ТОП-10 популярных
Для работы с вещественными числами в MySQL предусмотрено три типа данных - это типы FLOAT, DOUBLE, DECIMAL. Числовой тип FLOAT...
БОЛЬШЕ БОЛЬШИХ LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Больше больших LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
НОУТБУК с блестящим экраном
Eсли выпустившая ноутбук фирма предлагает его в качестве «замены настольному ПК», то это должно подразумевать под собой нечто большее, чем...
Eсли выпустившая ноутбук фирма предлагает его в качестве «замены настольному ПК», то это должно подразумевать под собой нечто большее, чем...
Иди и пиши. TravelMate C100
Планшетный компьютер платформы Tablet PC обязан в первую очередь быть легким, способным достаточно долго работать без подзарядки батарей. Эти требования...
Планшетный компьютер платформы Tablet PC обязан в первую очередь быть легким, способным достаточно долго работать без подзарядки батарей. Эти требования...
Магнито-оптический дисковод DynaMO
Cейчас, когда традиционные флоппи-дисководы на долгие годы замерли в своем развитии, поиск альтернативных носителей продолжается, и ситуация, казалось бы, разрешилась...
Cейчас, когда традиционные флоппи-дисководы на долгие годы замерли в своем развитии, поиск альтернативных носителей продолжается, и ситуация, казалось бы, разрешилась...
Компьютер для гурманов.«Эксимер ДМ»
Российская компания «Эксимер ДМ», известная как производитель настольных компьютеров, рабочих станций, серверов и ноутбуков, выступила техническим спонсором проведения торжеств, посвященных...
Российская компания «Эксимер ДМ», известная как производитель настольных компьютеров, рабочих станций, серверов и ноутбуков, выступила техническим спонсором проведения торжеств, посвященных...
Для длинных строк, т.е. строк длиннее 255 символов, в MySQL предусмотрены типы BLOB (Binary Large Object, большой двоичный объект) и...
В дополнение к календарным типам, предназначенным для хранения даты и времени отдельно, MySQL также поддерживает гибридные типы данных DATETIME и...
Вообще, к изменению настроек сервера прибегают очень редко. В MySQL программа заранее настроена так, чтобы соответствовать самым распространенным и основным...
PHP. Интеграция баз данных. Часть Седьмая.
02-06-2015
<< Предыдущая статья | Следующая статья >> |
PHP. Интеграция баз данных. Часть Шестая. | PHP. Интеграция баз данных. Часть Восьмая. |