|
<?php
<html>
<head>
<title>PHP. Шаг за шагом.</title>
<meta content="text/html; charset=Windows-1251" http-equiv=Content-Type>
</head>
<body text=black bgcolor=white link=blue vlink=blue alink=red>
<font color=red><h2 align=center>Шаг 9. Первый проект - начало. MySQL.</h2></font>
Очень надеюсь, что обзор возможностей был не слишком утомителен.
<p>Я думаю, сейчас самое время перейти от слов к делу - сделать первый небольшой скрипт. Возьмем для примера следующую задачу. Нужно сделать базу с книгами, которые появились или скоро появятся в продаже, и которые вызывают интерес.
<p>Для этого нам понадобятся: база (таблицы сделаем в <b>MySQL</b>), форма ввода, процедура загрузки из текстового файла (на тот случай, если ранее список книг лежал в файле - у меня дело именно так и обстоит), страница для вывода с сортировкой по критериям и, как дополнительный прибамбас (его сделаем в самую последнюю очередь), загрузка новостей с сайтов издательств с занесением выбранных позиций в базу.
<p>Цель проекта проста. Не упустить интересующее чтиво.
<p>Структура таблиц будет такой. Таблица описания книг <b>BOOKS</b>:
<dl>
<dt><b>id int(5)</b> - уникальный <b>id autoincrement primary key</b> - сначала хотел сделать автора и название ключем, решил, что это будет неудобно, если решим добавлять ссылочные таблицы)
<dt><b>author char(60)</b> - автор
<dt><b>namebook text(100)</b> - название книги
<dt><b>series int(2)</b> - <b>id</b> серии (если книга принадлежит серии) - для серий отдельная таблица
<dt><b>edition int(2)</b> - издание
<dt><b>year int(4)</b> - год издания
<dt><b>isbn char(20)</b> - <b>ISBN</b> (интересно, 20 символов хватит?)
<dt><b>pages int(4)</b> - объем книги
<dt><b>when_create int(2)</b> - номер квартала (за точку отсчета возьмем I квартал 2000)
<dt><b>how int(4)</b> - предположительная цена
<dt><b>status int(1)</b> - <b>id</b> статуса: обязательно заказать, посмотреть подробнее и т.п.
</dl>
Для начала хватит. Потом добавим серии книг, статусы, таблицу оглавлений и обложек (в <b>blob</b>-ах), комментарии к книгам и список интернет-магазинов, в которых книга была обнаружена.
<p>Для создания таблицы нам понадобится создать базу данных в <b>MySQL</b> (назовем ее тоже <b>BOOKS</b>) и в ней уже саму таблицу. Но сначала об установке <b>MySQL</b>. Я опишу установку под <b>WinNT</b> (под <b>*nix</b>-ы его надо собирать - я пока это проделывать не пробовал).
<p>Процедура эта довольно проста. Надо забрать дистрибутив с <a href=http://www.mysql.com target=_blank>http://www.mysql.com</a>, раскрыть <b>zip</b>, запустить <b>setup.exe</b>. После окончания установки в каталоге <b>MySQL</b>-я будет лежать файл <b>my-example.cnf</b>. Предполагается, что его надо будет скопировать в каталог <b>c:\</b> под именем <b>my.cnf</b>. Я этого не делал. Вместо этого, следуя <b>Readme</b>-файлу, я запустил <b>winmysqladmin.exe</b>, выбрал закладку "<b>my.ini Setup</b>", указал директорию, в которой живут поддиректории <b>MySQL</b>-я (у меня это <b>C:/usr/local/mysql</b>), выбрал радиобаттон в секции "<b>mysqld file</b>" <b>mysqld-nt</b> (запуск <b>MySQL</b>-сервера как службы в <b>NT</b>) и нажал на "<b>Save Modification</b>". После чего в <b>WINNT</b>-каталоге обнаружил файл <b>my.ini</b>. Все. Осталось убедиться, что в списке служб появилась служба "<b>mysql</b>", и выставить ей атрибут запуска (руками/автоматом).
<p>Итак, заходим в каталог (если вы, конечно, не внесли эту директорию в <b>path</b>-окружение)
<b>c:\mysql\bin</b> (или туда, куды вы установили <b>MySQL</b>; далее будем полагать, что <b>mysql</b> установлен в <b>c:\mysql</b>) и запускаем <b>mysqladmin</b> с параметром (краткую справку по параметрам <b>mysqladmin</b>-а я приведу в следующем шаге).
<pre> create <имя база>.</pre>
В нашем случае <pre> create books.</pre> <b>mysqladmin</b> никакой мессагой нас не порадовал,
но, зайдя в <b>c:\mysql\data</b> (там по умолчанию <b>mysql</b> хранит базы данных, если не
задано противное в конфигурации сервера), можно с чувством глубокого удовлетворения обнаружить
директорию <b>books</b>. Это и есть наша база. Правда, директория пуста - мы ведь не создали в базе еще
ни одной таблицы. (Кстати, если вы решите удалить базу пудем удаления директории -
лучше откажитесь от этой затеи. <b>Mysql</b> хранит у себя информацию о существующих базах.
Для корректного удаления базы есть параметр у <b>mysqladmin</b>-а:
<pre>
drop <имя базы>.
</pre>
Создаем таблицу. Можно зайти в <b>mysql.exe</b> и создать там, а можно скормить тектовый файл с командами для <b>mysql</b>-я на вход <b>exe</b>-шнику. (При заходе с локальной машины <b>mysql</b> считает, что пришел <b>root</b> со всеми полномочиями - о пользователях и полномочиях в <b>mysql</b>-е поговорим позднее).
<p>Итак, либо, зайдя в <b>mysql</b>, введите нижеследующую последовательность команд,
либо сохраните их в файле (например, <b>books.sql</b>) и скажите
<pre>
mysql < books.sql
</pre>
А вот содержимое <b>books.sql</b>:
<pre>
connect books;
create table books (
id int(5) not null primary key auto_increment,
author char(60),
namebook varchar(100),
series int(2),
edition int(2),
year int(4),
isbn char(20),
pages int(4),
when_create int(2),
how int(4),
status int(1)
);
</pre>
Зайдя теперь в каталог <b>c:\mysql\data\books</b>, вы обнаружите целых три файла: <b>books.frm</b> (структура таблицы), <b>books.myd</b> (данные; сейчас он нулевой длины - <b>insert</b>-ов ведь не было!) и <b>books.myi</b> (данные о ключах).
<p>На последок небольшое пояснение по первой строке (полю) в <b>insert</b>-е. По идее, параметр "<b>not null</b>" не нужен, раз "<b>primary key</b>" говорим. Но есть мнение, что лучше все же его указать (я не готов это утверждение как-либо комментировать). <b>Auto_increment</b>, соответственно, присваивает одноименный атрибут полю, позволяя при <b>insert</b>-е автоматически генерить цифру на единицу большую, чем в предыдущем <b>insert</b>-е.
<hr>
<center><font size=2><a href=php8.html>Предыдущий Шаг</a> | <a href=php10.html>Следующий Шаг</a></font></center>
<hr><center><font size=2>By <a href="mailto:kgp@nm.ru?SUBJECT=FromPHPByStep">Konstantin Platonov</a>.</center>
</body>
</html>
?>