Хотя при изучении данного раздела снова будет использоваться функция
mysql_db_query ( ) , извлечение данных отличается от сохранения тем, что из
влекаемая информация должна быть присвоена переменной. Рассмотрим этот
процесс поэтапно.
Данные из базы можно прочитать с помощью простого запроса:
$Query="SELECT * from $TableName";
Звездочка эквивалентна понятию «все» (то есть требуется выбрать все из
столбца $TableName). Этой короткой инструкции часто вполне достаточно для
извлечения данных.
Однако запрос можно ограничить, указав только часть полей, например
SELECT FirstName, Comments from $TableName. Этот запрос дает задание извлечь
информацию только из этих двух столбцов (имя и комментарий).
Другой способ ограничить запрос написать чтонибудь вроде S.ELECT * from
$TableName where (FirstName= ‘Larry’). Здесь мы запрашиваем информацию
из всех столбцов, но только из тех строк, где в столбце с указанием имени име
ется значение Larry. Хорошие примеры того, как в SQL эффективно и гибко
используется всего несколько терминов.
Основное отличие извлечения данных от записи их в базу состоит в том, что
запрос необходимо обрабатывать подругому. Я предпочитаю присваивать ре
зультаты запроса переменной:
$Result=mysql_db_query($DBName, $Query, $Link);
Как сказал бы непрофессионал, этой переменной теперь известен резуль
тат запроса. Для извлечения информации необходимо поместить переменную
$Result в цикл, последовательно пройдя по всем строкам полученного резуль
тата запроса.
while($Row=mysql_fetch_array($Result)) {
statements;
}
Каждая итерация цикла будет превращать следующую строку информации
из запроса (сохраненную в переменной $Result) в массив с названием $Row.
Этот процесс будет продолжаться, пока не останется больше строк с информа
цией. Лучший способ понять данную систему написать сценарий, который
считывает информацию из таблицы Feedback (не забудьте заполнить таблицу
данными с помощью формы form.html).
Извлечение данных из таблицы
- Создайте новый PHPдокумент в текстовом редакторе.
- Начните со стандартного HTMLзаголовка.
- Откройте PHPраздел страницы и задайте переменные для доступа в базу
данных. - Соединитесь с сервером базы данных, напишите и выполните запрос.
- Создайте HTMLтаблицу для выведения на экран результатов запроса.
- Создайте цикл, извлекающий строки из базы данных, пока они не кон
чатся. - Распечатайте информацию из базы данных в виде HTMLтаблицы.
- Закройте строку HTMLтаблицы и цикл while.
- Отключитесь от системы MySQL, закройте HTMLтаблицу, РНРраздел
и саму HTMLстраницу. - Сохраните сценарий как DisplayDB.php (листинг 11.5), загрузите его на
сервер и протестируйте в браузере (рис. 11.6).
<HTMLxHEADxTITLE>Retrieving Data from a Database</TITLEx/HEADxBODY>
<?php
// Установка значения переменных для доступа к базе данных.
$Host = "localhost";
$User = "user";
$Password = "password";
$DBName = "NewDatabase";
$TableName = "Feedback";
$Link = mysql_connect ($Host, $User, $Password);
$Query = "SELECT * from $TableName";
$Result = mysql_db_query ($DBName, $Query, $Link);
Этот запрос прост и полезен. Как было упомянуто выше, его результаты
будут сохранены в переменной, которую мы позже поместим в цикл.
print ("<TABLE BORDER=1 WIDTH="75%" ,CELLSPACING=2
~CELLPADDING=2 ALIGN=CENTER>n");
print ("<TR ALIGN=CENTER VALIGN=TOP>n");
print ("<TD ALIGN=CENTER VALIGN=TOP>Name</TD>n");
print ("<TD ALIGN=CENTER VALIGN=TOP>Email Address</TD>n");
print ("<TD ALIGN=CENTER VALIGN=TOP>Comments</TD>n");
print ("</TR>n");
Так как мы извлекаем информацию из таблицы и выводим ее на экран в виде
кода HTML, стоит поместить данные и в HTMLтаблицу. Тогда страница будет
выглядеть аккуратно.
while ($Row = mysql_fetch_array ($Result)) {
Цикл помещает в переменную $Row массив, состоящий из первой строки
таблицы в переменной $Result. Затем исполняются соответствующие коман
ды (шаг 7). При обращении к строке mysql_f etch_array ($Result) на очеред
ном проходе цикла переменная $Row получает следующую строку. Цикл функ
ционирует, пока не останется строк с информацией.
print ("<TR ALIGN=CENTER VALIGN=TOP>n");
print ("<TD ALIGN=CENTER VALIGN=TOP>$Row[FirstName]
$Row[LastName]</TD>n") ;
print ("<TD ALIGN=CENTER VALIGN=TOP>$Row[EmailAddress]</TD>n");
print ("<TD ALIGN=CENTER VALIGN==TOP>$Row[Comments]</TD>n"} ;
print ("</TR>n");
Так как была использована функция mysql_f etch_array ( ) , вы можете обра
щаться к каждому отдельному столбцу в извлеченной из базы данных строке
точно так же, как к массиву. Ключи массива названия столбцов таблицы, то
есть имя, фамилия, адрес электронной почты и комментарии (конечно, назва
ния полей даются на английском языке и с обязательным соблюдением реги
стра букв).
print ("</TR>n");
} .
Еще раз подчеркнем, что этот цикл получает строку данных из таблицы БД,
присваивает ее массиву $Row, затем печатает строку HTMLтаблицы.
mysql_close ($Link);
print ("</TABLE>n");
?></BODYx/HTML>
Листинг 11.5 т SQLзапрос на извлечение всех данных из таблицы очень
прост, но, чтобы получить все данные* необходимо создать цикл.
1 <HTML>
2 <HEAD>
3 <TITLE>Retrieving Data from a Database</TITLEx/HEAD>
4<BODY>
5<?php
6// Установка значения переменных для доступа к базе данных.
7$Host = "localhost";
8 $User = "user";
9$Password = "password";
10$DBName = "NewDatabase";
11 $TableName = "Feedback";
12
13$Link = mysql_connect ($Host, $User, $Password);
14
15 $Query . "SELECT * from $TableName";
16$Result = myeql_db_query ($DBName, $Query, $Link);
17
18 // Создание таблицы.
19print ("<TABLE BORDER=1 WIDTH="75%" CELLSPACING=2 CELLPADDING=2
ALIGN=CENTER>n");
20print ("<TR ALIGN=CENTER VALIGN=TOP>.n") ;
21 print ("<TABLE BORDER=1 WIDTH="75%" CELLSPACING=2 CELLPADDING=2
22 print ("</TR>n");
23 // Получение результатов из базы данных.
24 while ($Row = mysql_fetch_array ($Result)) {
25
26 $User = "user";
27 print ("<TR ALIGN=CENTER VALIGN=TOP>n");
28 print ("<TD ALIGN=CENTER VALIGN=TOP>$Row[FiretName]
29 $Row[LaetName]</TD>n?);
30 print ("<TD ALIGN=CENTER VALIGN=TOP>$Row[EmailAddreee]</TD>n")i
31 print ("<TD ALIGN=CENTER VALIGN=TOP>$Row[Commente]</TD>n");
32 print ("</TR>n");
33}
34mysql_close ($Link);
35print ("</TABLE>n");
36?>
37</BODY>
38</HTML>