Вход Регистрация
Файл: backUP/php_lsn/php9.html
Строк: 81
<?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:mysqlbin</b> (или туда, куды вы установили <b>MySQL</b>; далее будем полагать, что <b>mysql</b> установлен в <b>c:mysql</b>) и запускаем <b>mysqladmin</b> с параметром (краткую справку по параметрам <b>mysqladmin</b>-а я приведу в следующем шаге).
<
pre>    create &lt;имя база&gt;.</pre>
В нашем случае <pre>    create books.</pre> <b>mysqladmin</b> никакой мессагой нас не порадовал,
но, зайдя в <b>c:mysqldata</b> (там по умолчанию <b>mysql</b> хранит базы данных, если не 
задано противное в конфигурации сервера
), можно с чувством глубокого удовлетворения обнаружить
директорию 
<b>books</b>. Это и есть наша база. Правда, директория пуста - мы ведь не создали в базе еще
ни одной таблицы
. (Кстати, если вы решите удалить базу пудем удаления директории -
лучше откажитесь от этой затеи. <b>Mysql</b> хранит у себя информацию о существующих базах.
Для корректного удаления базы есть параметр у <b>mysqladmin</b>-а:
<
pre>
    
drop &lt;имя базы&gt;.
</
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:mysqldatabooks</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>
?>
Онлайн: 3
Реклама