Основною перевагою динамічних сайтів, в порівнянні зі статичними, є можливість відділення даних від коду, що відповідає за їх візуальне уявлення. Завдяки такому підходу, можна створювати сайти, що формують сторінки в залежності від запитів відвідувачів. Однак для того, щоб створити такий сайт, необхідно організувати сховище структурованих даних. Це необхідно для того, щоб програма, яка формує сторінки, могла вибирати дані відповідно до критеріїв запиту, що надійшов від користувача сайту.
Найпростішим способом організації сховища даних є використання текстових файлів. Можна зберігати дані в одному або декількох текстових файлах, а всередині файлів відокремлювати елементи даних один від одного за допомогою символів - розділювачів. Такий спосіб організації даних може бути ефективний при невеликій кількості зберігається та обробляється інформації. Однак для того, щоб оперувати даними, збереженими в текстових файлах, необхідно розробити набір підпрограм для додавання, видалення, модифікації і вибірки даних. У разі якщо структура даних буде змінена, підпрограми управління даними доведеться переписувати.
Для того щоб уникнути подібних труднощів, можна використовувати бази даних. Оперувати даними, занесеними в базу даних (БД), можна за допомогою СУБД - системи управління базою даних. СУБД надають інтерфейс, за допомогою якого можна організовувати бази даних з довільною внутрішньою структурою і керувати даними, розташованими в них.
На даний момент найбільш широке поширені еляціонние бази даних. Інформація в них представляється у вигляді набору таблиць. Кожна таблиця містить одну або кілька колонок, які описують атрибути даних, а кожен рядок таблиці є екземпляром даних. В якості мови управління базою даних використовується мова структурованих запитів SQL.
Схема роботи динамічного сайту, який використовує як сховища базу даних:
Браузер надсилає запит веб-сервера на формування HTML- сторінки
Веб-сервер запускає інтерпретатор PHP для виконання скрипта, що формує HTML-сторінку
В процесі роботи скрипта здійснюється звернення до бази даних для вибірки інформації, відповідної параметрами запиту, надісланого браузером
На основі інформації, обраної з бази даних, PHP- скрипт формує HTML-сторінку
Веб-сервер повертає браузеру сформовану HTML-сторінку
Браузер інтерпретує HTML-інструкції, що містяться в тілі отриманої сторінки, і виводить її вміст на екран монітора
В даний час для організації сховища даних веб-додатків найбільш часто використовується СУБД MySQL.
MySQL є компактним і простим в експлуатації сервером баз даних, доступним для платформ Unix, Windows NT, Windows 9x. При функціонуванні під управлінням ОС Unix СУБД використовує потоки, що дозволяє створити на базі MySQL високопродуктивний і добре масштабується сервер баз даних.
MySQL підтримує стандарти початкового рівня ANSI SQL92 і ODBC. Додатки бази даних можуть бути реалізовані за допомогою популярних мов високого рівня, таких як C, Perl, PHP і інші. СУБД дозволяє оперувати таблицями з сумарним обсягом даних до 4 Гбайт.
У PHP реалізований набір функцій, що дозволяють скрипту взаємодіяти з MySQL. Для того щоб скористатися базою даних, необхідно встановити з'єднання між клієнтською програмою (в даному випадку програмою, написаної на мові PHP) і сервером MySQL. Встановити з'єднання можна за допомогою функції:
mysql_connect ( "хост [: порт] [сокет]", "ім'я користувача", "пароль")
Функція отримує три вхідних параметри: хост, ім'я користувача і пароль. Хост - ім'я сервера, на якому встановлена СУБД. У разі, якщо веб-сервер і сервер бази даних працюють на одній машині, значення параметра хост має значення "localhost". Після імені хоста можна так само вказати порт і шлях до сокета. Це необхідно в разі, якщо в настройках використовуються порт і сокет, відмінні від встановлених за замовчуванням.
Ім'я користувача - логін користувача, якому дозволено доступ до СУБД.
Пароль - пароль користувача, якому дозволено доступ до СУБД.
Функція повертає ідентифікатор з'єднання в разі успіху і значення "брехня" при невдачі. Ідентифікатор з'єднання буде використовуватися при виклику всіх функцій, що посилають запити серверу MySQL.
Якщо зробити повторний виклик rnysql_connect з тими ж аргументами, нове з'єднання з сервером не буде встановлено; буде повернуто ідентифікатор вже відкритого з'єднання.
Зазвичай логін і пароль користувача встановлюються системним адміністратором.
Після установки для звернення до MySQL досить вказати в якості хоста localhost, а в якості імені користувача та пароля використовувати порожні рядки (створення користувачів і роздача прав доступу здійснюється після установки адміністратором).
Після завершення роботи PHP-програми з'єднання буде автоматично закрито. Однак якщо виникає необхідність закрити з'єднання в процесі роботи програми, можна скористатися функцією
Як параметр функція отримує ідентифікатор з'єднання, яке необхідно закрити
Після того, як з'єднання встановлено, необхідно вибрати базу даних, з якої буде здійснюватися робота. Для вибору активної бази даних призначена функція
mysql_select_db ( "ім'я бази даних", [ідентифікатор з'єднання])
Параметрами функції є ім'я бази даних і ідентифікатор з'єднання. Ідентифікатор з'єднання не є обов'язковим параметром. Оскільки в процесі роботи програми, як правило, використовується одне з'єднання, його не обов'язково кожен раз вказувати в явному вигляді.
Створити базу даних можна за допомогою функції
mysql_create_db ( "ім'я бази даних", [ідентифікатор з'єднання])
Іншою можливістю для створення нової бази даних є посилка запиту "create database" за допомогою функції mysql_query, яка буде розглянута нижче.
Видалити базу даних з усім її вмістом можна за допомогою функції
mysql_drop_db ( "ім'я бази даних", [ідентифікатор з'єднання])
Аналогічного результату можна досягти шляхом посилки sql-запиту "drop database".
Однією з найважливіших функцій є функція відправки SQL-запиту
mysql_query ( "запит", [ідентифікатор з'єднання])
Функція повертає ідентифікатор результату. Для команд визначення даних, таких як CREATE, ALTER, DROP, ідентифікатор результату вказує на успіх чи невдачу при виконанні запиту.
Для команд маніпулювання даними, таких як DELETE, INSERT, UPDATE, ідентифікатор результату дозволяє дізнатися кількість оброблених рядків.
Для команди SELECT ідентифікатор результату є покажчиком на результуючий набір вибраних даних.
Дізнатися кількість записів, обраних у відповідь на запит, можна за допомогою функції
mysql_num_rows (ідентифікатор результату)
Функція повертає кількість записів в наборі, асоційоване з ідентифікатором результату. Слід зауважити, що мова йде тільки про ідентифікатор результату, отриманого після запиту типу select.
Отримати доступ до результатів вибірки можна за допомогою функцій
mysql_fetch_row (ідентифікатор результату)
mysql_fetch_array (ідентифікатор результату)
Перераховані вище функції отримують в якості параметра ідентифікатор результату. При виконанні функції витягується одна запис з результуючого набору і повертається у вигляді масиву. Внутрішній покажчик автоматично переміщається на наступний запис (результат запиту може містити більше одного запису). У разі, якщо на момент виклику все записи були пройдені, функція повертає значення "брехня".
Після виконання mysql_query покажчик відповідного результуючого набору встановлюється на першому записі. Послідовний виклик функції дозволяє отримати доступ до всіх записів результуючого набору.
Функції mysql_fetch_array і mysql_fetch_row відрізняються типом повертається результату:
mysql_fetch_array повертає асоціативний масив, назви елементів якого співпадають з назвами стовпців в запиті типу select (і, відповідно, в отриманому результаті);
mysql_fetch_row повертає масив, індексований числами, починаючи з елемента 0 (послідовність елементів масиву відповідає послідовності їх перерахування в запиті).
Пам'ять, що зберігає результуючий набір даних, автоматично звільняється відразу після закінчення роботи PHP-скрипта. Однак якщо з яких-небудь причин виникає необхідність в достроковому звільненні пам'яті, необхідно скористатися функцією
mysql_free_result (ідентифікатор результату)
У процесі роботи з базою даних можуть виникати різні помилки (наприклад, можуть бути виявлені синтаксичні помилки в SQL-запитах.). Для того, щоб отримати повідомлення про помилку, повернене сервером MySQL, можна скористатися функцією
mysql_error (ідентифікатор з'єднання)
Функція повертає повідомлення про помилку, отримане від сервера в результаті попередньої команди (функції, запиту), пов'язаної з обігом до MySQL. Помилки, що виникають на сервері MySQL, не викликають припинення виконання сценарію.
Розробка програми починається з визначення структури бази даних. В даному випадку, база даних буде складатися з однієї таблиці наступного формату: