Вход Регистрация
Файл: backUP/php_lsn/php10.html
Строк: 89
<?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>Шаг 10. Заглянем в базуПервый скрипт.</h2></font>
<
p>Два замечания в начале:
<
p>1В предыдущем шаге я допустил досадную оплошностьДля установки <b>MySQL</bкак службы под <b>Windows NT</bкроме создания <b>my.ini</bфайла <b>winmysqladmin</b>-ом надоконечно жевыполнить саму установку сервера как службы вот так:
<
pre>
    
C:mysqlbinmysqld-nt --install
</pre>
Приношу свои извинения за допущенную ошибку.
<
p>2После опубликования предыдущих трех шагов мне пришло письмо от Michael Vladimirov (спасибоMichael !) - сайт "How IT works" <a href=http://it.sinor.ru/>http://it.sinor.ru/</a>, - по поводу проблемы с установкой <b>PHP</b> как модуля <b>Apache</b>. Michael пишет, что <b>PHP</b> не становится как модуль при включенной библиотеке <b>GD</b.. :-((( После комментирования строчки "<b>extension=php_gd.dll</b>" в <b>php.ini</b> веб-сервер <b>Apache</b> действительно запустился. К этой теме я еще вернусь, когда выясню некоторые пока для меня неясные моменты.
<p>Итакбаза (и первая таблица в нейсозданы.
<
p>Напишем скрипткоторый будет формировать <b>html</b>-страницу с содержимым таблицыНо сначала таблицу надо заполнить содержимымТак как форма ввода у нас еще не созданато воспользуемся методом из предыдущего шага создадим <b>sql</b>-запрос на добавление записи в таблицу и направим его (файл с запросомна вход <b>mysql.exe</b>.
<
p>Вот этот скрипт:
<
pre>
connect books;
insert into books (
    
idauthornamebookserieseditionyearisbn,
    
pageswhen_create,    howstatus)
    
values (null"Р. Яргер и др."
    
"MySQL и mSQL. Базы данных для небольших предприятий и Интернета",
    
002000"5-93286-010-3"55731700),
           (
null"Ларри УОЛЛ""Программирование на Perl",
    
032001null12005null0);
</
pre>
Несколько замечаний по этому запросуВо-первыхя не сказал "<b>commit</b>"В данном случае это не обязательнот.к. <b>commit</bпроизойдет по окончанию скрипта автоматическиВо-вторыхв качестве значения для ключевого поля <b>id</bвыбрано значение <b>null</b>, что заставляет <b>mysql</bприсвоить (в силу параметра для поля <b>auto_increment</b>) числовое значениена единицу большеечем максимальное из существующих значений для этого поля в таблицеВ-третьихнекоторые поля мы "занулили" потом заполнимИ в-четвертыхэтот запрос к <b>sql</b>-серверу отличается от стандартаДело в томчто (как я уже говорил) <b>mysql</bимеет некоторые отличия от <b>sql</b>-стандартаВ частности, <b>insert</bдопускает такую сокращенную форму записиПо правилам я бы должен был бы вместо одного insert-а с перечисленными через запятую группами значений в <b>values</bиспользовать два запросаНо мы облегчили себе жизньВообще-то этона мой взглядне лучшая практика использовать всякие "отклонения от нормы"По крайней мере страдает переносимостьНо нас сейчас эта тема вряд ли должна волновать
<
p>Теперь напишем скрипт для нашей первой страницы. <b>HTML</b>-код пока использован по минимумуКстатичуть не забылЕсли вы используете (готовитесь использовать ;) <b>PHP3</b>, то в <b>php3.ini</bв виндючем каталоге раскомментируйте строчку
<pre>
extension=php3_mysql.dll
</pre>
Для <b>PHP4</b> (его <b>ini</b>-файл кличут <b>php.ini</b>) ничего делать не надот.кподдержка <b>mysql</bв 4-й версии встроенная.

<
p>И еще замечание: <b>PHP3</bи <b>PHP4</bможно использовать на одном компьютере вместеУ меня в <b>apache</bфайлы с расширением <b>php3</bобрабатывает 3-я версияа <b>php4</bи <b>phtml</b> - 4-я.
<
p>Вот фрагмент из <b>httpd.conf</b>:
<
pre>
&
lt;Directory "C:/usr/local/php4"&gt;
  
Options ExecCGI
&lt;/Directory&gt;
ScriptAlias "/__php4_dir__/" "C:/usr/local/php4/"
Action application/x-httpd-php4 "/__php4_dir__/php.exe"
&lt;Directory "C:/usr/local/php3"&gt;
  
Options ExecCGI
&lt;/Directory&gt;
ScriptAlias "/__php3_dir__/" "C:/usr/local/php3/"
Action application/x-httpd-php3 "/__php3_dir__/php.exe"
</pre>
А вот фрагмент файла <b>mime.types</b>:
<
pre>
application/x-httpd-php3        phtml php3
application
/x-httpd-php4        php4
</pre>
А теперь обещанный скрипт:
<
pre>
&
lt;html&gt;&lt;body&gt;
&
lt;table border=1&gt;
&
lt;?php
$db_name
="books";    //база данных
$table="books";        //таблица
$host="localhost";    //хост
$user="";        //логин (при коннекте к локальному хосту логин и пароль не нужен - нас итак пустят! ;)
$pass="";        //password
//законнектимся - получаем link-идентификатор или вывод номера и текста ошибки
//с последующим прерыванием работы скрипта (die())
$link=mysql_connect($host,$user,$pass) or die(mysql_errno($link).mysql_error($link));
//выбираем базу данных BOOKS, созданную нами ранее
$db=mysql_select_db($db_name,$link) or die(mysql_errno($link).mysql_error($link));
//выберем данные
$result=mysql_query("SELECT * FROM ".$table$link) or die(mysql_errno($link).mysql_error($link));
//сформируем заголовок таблицы результатов выборки
$th=explode("#","ID#Автор#Название книги#Серия#Ред.#Год#ISBN#Стр.#Когда#Цена#Статус");
echo 
"&lt;tr&gt;&lt;th&gt;",implode("&lt;/th&gt;&lt;th&gt;",$th),"&lt;/th&gt;&lt;/tr&gt;";
//выведем результаты в HTML-документ
while($data=mysql_fetch_row($result)) {
    echo 
"&lt;tr&gt;&lt;td&gt;"implode("&lt;/td&gt;&lt;td&gt;",$data), "&lt;/td&gt;&lt;/tr&gt;";
}
//освободить выделенную под результат выборки память
mysql_free_result($result);
mysql_close($link);
?&
gt;
&
lt;/table&gt;
&
lt;/body&gt;&lt;/html&gt;   
</
pre>
Некоторые комментарии (более подробно в следующих шагах).
<
p>Во-первыхдаже в такой упрощенной форме код работы с <b>mysql</bизбыточенТ.кмы работает с одной базойда еще и делаем единственный запросто вместо <b>mysql_connect()</b>, <b>mysql_select_db()</bи <b>mysql_query()</bдостаточно было вызвать <b>mysql_db_query()</b>. Эта функция при необходимости выполнит коннекцию (в прочемв этом она не одинока), выберет базу данных и выполнит запрос к базе.
<
p>Во-вторых,
<
b>mysql_close()</bтоже необязательнат.ксоединение с сервером будет автоматически закрыто при окончании скрипта.
<
p>В-третьихи уж конечно же в данном случае во <b>mysql_free_result()</bникакой необходимостиОсвобождать память при единственном запросе да еще такого незначительного объема... Здесь эта функция вызвана скорее для демонстрации возможных операций с <b>mysql</bна <b>php</b>, ну илиесли хотитедля порядка. ;)
<
p>В-четвертыхфункции <b>implode()</bи <b>explode()</bотносятся к стринговымЭтой теме будет посвящен отдельный шаг (шаги). А пока: <b>explode()</bсоздает массив из фрагментов строкиразбирая ее как строку с разделителемуказанном в первом параметре. <b>Implode()</bделает обратную операциюЭту пару я применил для удобства по-моему это прощечем набирать строку в виде "...текст&lt;/th&gt;&lt;th&gt;текст..." и уж тем более прощечем делать кучу <b>echo</bс текстамиобрамленными тегами <b>&lt;th&gt;/&lt;/th&gt;</b>.
<
p>И в-пятыхсие чудо программистской мысли ;) выполняется как под 4-й версией php4так и под 3-ей
<
p>Далее в программеподробное описание функций работы с <b>mysql</b>, форма для ввода записейчтение (импортданных из файла и запись (экспортв файл, <b>index.php3</b>.
<
hr>
<
center><font size=2><a href=php9.html>Предыдущий Шаг</a> | <a href=php11.html>Следующий Шаг</a></font></center>
<
hr><center><font size=2>By <a href="mailto:kgp@nm.ru?SUBJECT=FromPHPByStep">Konstantin Platonov</a>.</center>
</
body>
</
html>
?>
Онлайн: 1
Реклама