Поиск

Извлечение данных

Хотя при изучении данного раздела снова будет использоваться функция 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).

Извлечение данных из таблицы

  1. Создайте новый PHPдокумент в текстовом редакторе.
  2. Начните со стандартного HTMLзаголовка.
  3. <HTMLxHEADxTITLE>Retrieving Data from a Database</TITLEx/HEADxBODY>
  4. Откройте PHPраздел страницы и задайте переменные для доступа в базу данных.
  5. <?php
    // Установка значения переменных для доступа к базе данных.
    $Host = "localhost";
    $User = "user";
    $Password = "password";
    $DBName = "NewDatabase";
    $TableName = "Feedback";
  6. Соединитесь с сервером базы данных, напишите и выполните запрос.
  7. $Link = mysql_connect ($Host, $User, $Password);
    $Query = "SELECT * from $TableName";
    $Result = mysql_db_query ($DBName, $Query, $Link);

    Этот запрос прост и полезен. Как было упомянуто выше, его результаты будут сохранены в переменной, которую мы позже поместим в цикл.

  8. Создайте HTMLтаблицу для выведения на экран результатов запроса.
  9. 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таблицу. Тогда страница будет выглядеть аккуратно.

  10. Создайте цикл, извлекающий строки из базы данных, пока они не кон чатся.
  11. while ($Row = mysql_fetch_array ($Result)) {

    Цикл помещает в переменную $Row массив, состоящий из первой строки таблицы в переменной $Result. Затем исполняются соответствующие коман ды (шаг 7). При обращении к строке mysql_f etch_array ($Result) на очеред ном проходе цикла переменная $Row получает следующую строку. Цикл функ ционирует, пока не останется строк с информацией.

  12. Распечатайте информацию из базы данных в виде HTMLтаблицы.
  13. 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 ( ) , вы можете обра щаться к каждому отдельному столбцу в извлеченной из базы данных строке точно так же, как к массиву. Ключи массива названия столбцов таблицы, то есть имя, фамилия, адрес электронной почты и комментарии (конечно, назва ния полей даются на английском языке и с обязательным соблюдением реги стра букв).

  14. Закройте строку HTMLтаблицы и цикл while.
  15. print ("</TR>\n");
    } .

    Еще раз подчеркнем, что этот цикл получает строку данных из таблицы БД, присваивает ее массиву $Row, затем печатает строку HTMLтаблицы.

  16. Отключитесь от системы MySQL, закройте HTMLтаблицу, РНРраздел и саму HTMLстраницу.
  17. mysql_close ($Link);
    print ("</TABLE>\n");
    ?></BODYx/HTML>
  18. Сохраните сценарий как DisplayDB.php (листинг 11.5), загрузите его на сервер и протестируйте в браузере (рис. 11.6).
  19. Листинг 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>