Урок 20: Получение данных из БД

Теперь настало время запросить данные из нашей БД для наших PHP-страниц.

Это один из наиболее важных уроков данного учебника. Когда вы прочтёте и разберёте этот урок, вы поймёте, почему вэб-решения на основе БД настолько мощны, и ваше представление о вэб-разработке значительно расширится.

SQL-запросы

Для получения данных из БД вы используете запросы. Примером запроса может быть: "получить данные из таблицы 'people', отсортированные по алфавиту" или "получить имена из таблицы 'people'".

Напоминаем, что язык Structured Query Language (SQL) используется для общения с БД. Посмотрим на простой пример:


	Получить все данные из таблицы 'people'
	
	

В SQL мы запишем:


	SELECT * FROM people
	
	

Синтаксис говорит сам за себя. Просто читайте и смотрите, как используются SQL-операторы в следующих примерах.

Пример 1: Запрос данных из БД

Этот пример использует БД и таблицу из Урока 19 и Урока 18. Следовательно, прочтите сначала эти уроки.

Данный пример показывает, как данные из таблицы "people" запрашиваются с помощью SQL-запроса.

Этот SQL-запрос возвращает результат в виде серии записей/records. Эти записи хранятся в так называемом наборе Записей/recordset. Набор записей можно охарактеризовать как род таблицы в памяти сервера, содержащей данные (записи), и каждая запись подразделяется на отдельные поля (или столбцы).

Набор данных можно сравнить с таблицей, где каждая запись аналогична ряду таблицы. В PHP мы может пройти по набору записей с помощью циклов и функции документацияmysql_fetch_array, которая возвратит каждый ряд в виде массива.

Следующий код показывает, как использовать документацияmysql_fetch_array для прохода по набору записей:


	<html>
	<head>
	<title>Запрос данных из таблицы</title>
	</head>
	<body>

	<?php
	// Соединиться с сервером БД
	mysql_connect("mysql.myhost.com", "user", "sesame") or die (mysql_error ());

	// Выбрать БД
	mysql_select_db("mydatabase") or die(mysql_error());

	// SQL-запрос
	$strSQL = "SELECT * FROM people";

	// Выполнить запрос (набор данных $rs содержит результат)
	$rs = mysql_query($strSQL);
	
	// Цикл по recordset $rs
	// Каждый ряд становится массивом ($row) с помощью функции mysql_fetch_array
	while($row = mysql_fetch_array($rs)) {

	   // Записать значение столбца FirstName (который является теперь массивом $row)
	  echo $row['FirstName'] . "<br />";

	  }

	// Закрыть соединение с БД
	mysql_close();
	?>
	</body>
	</html>
	
	

Обратите внимание, как для каждой записи мы получаем содержимое столбца "FirstName", печатая $row['FirstName']. Аналогично мы можем получить содержимое столбца "Phone", печатая $row['Phone'], к примеру.

Порядок набора записей точно такой же, как в таблице в БД. Но в следующем уроке мы посмотрим, как сортировать набор записей.

Пример 2: Сортировка данных по алфавиту, хронологически или численно

Часто бывает удобно, когда список или таблица представлены в алфавитном порядке, хронологически или численно. Такая сортировка легко выполняется в SQL, и синтаксис Order By ColumnName используется для сортировки содержимого столбцов.

Возьмём SQL-оператор из предыдущего примера:


	strSQL = "SELECT * FROM people"
	
	

Запись может, например, быть отсортирована в алфавитном порядке по первому имени людей:


	strSQL = "SELECT * FROM people ORDER BY FirstName"
	
	

Либо хронологически по дате рождения:


	strSQL = "SELECT * FROM people ORDER BY BirthDate"
	
	

Сортировка может выполняться по восходящей/ascending или по нисходящей/descending, добавлением DESC:


	strSQL = "SELECT * FROM people ORDER BY BirthDate DESC"
	
	

В следующем примере люди сортируются по возрасту:

	<html>
	<head>

	<title>Запросить данные из БД</title>

	</head>
	<body>
	
	<?php
	// Соединиться с сервером БД
	mysql_connect("mysql.myhost.com", "user", "sesame") or die (mysql_error ());

	// Выбрать БД
	mysql_select_db("mydatabase") or die(mysql_error());

	// SQL-запрос
	$strSQL = "SELECT * FROM people ORDER BY BirthDate DESC";

	// Выполнить запрос (набор записей $rs содержит результат)
	$rs = mysql_query($strSQL);
	
	// Цикл по набору записей $rs
	while($row = mysql_fetch_array($rs)) {

	   // Записать значение столбцов FirstName и BirthDate
	  echo $row['FirstName'] . " " . $row['BirthDate'] . "<br />";

	  }

	// Закрыть соединение с БД
	mysql_close();
	?>

	</body>
	</html>
	
	

Попробуйте самостоятельно изменить этот SQL-оператор и отсортировать записи по имени, фамилии или номеру телефона.

Получение выбранных данных

До сих пор наш SQL-оператор запрашивал все ряды таблицы. Но часто бывает необходимо установить критерии SQL-запроса для выборки данных, например, если нам нужны только те ряды, в которых есть телефонный номер или конкретная фамилия.

Скажем, мы хотим запросить из БД людей, имеющих номер телефона "66554433". Это можно сделать так:


	strSQL = "SELECT * FROM people WHERE Phone = '66554433 '"
	
	

В SQL имеется шесть операций сравнения:

= равно
< меньше
> больше
<= меньше или равно
> = больше или равно
!= не равно

Кроме того, имеются логические операции:

AND
OR
NOT

См. в Уроке 6 о настройке условий.

В следующем примере мы используем условия для настройки адресной книги.

Пример 3: Адресная книга

В этом примере мы попытаемся скомбинировать многое из уже изученного. Создадим список имён из БД, где каждое имя будет ссылкой на последующую детальную информацию о человеке.

Для этого понадобятся два файла - list.php и person.php - с таким кодом:

Код файла list.php


	<html>
	<head>
	<title>Запросить данные из БД</title>
	</head>
	<body>

	<ul>

	<?php
	// Соединиться с сервером БД
	mysql_connect("mysql.myhost.com", "user", "sesame") or die (mysql_error ());

	// Выбрать БД
	mysql_select_db("mydatabase") or die(mysql_error());

	// SQL-запрос
	$strSQL = "SELECT * FROM people ORDER BY FirstName DESC";

	// Выполнить запрос (набор данных $rs содержит результат)
	$rs = mysql_query($strSQL);
	
	// Цикл по $rs
	while($row = mysql_fetch_array($rs)) {

	   // Иям человека
	  $strName = $row['FirstName'] . " " . $row['LastName'];

	   // Создать ссылку на person.php с id-value в URL
	   $strLink = "<a href = 'person.php?id = " . $row['id'] . "'>" . $strNavn . "</a>";

	    // Листинг ссылок
	   echo "<li>" . $strLink . "</li>";

	  }

	// Закрыть соединение с БД
	mysql_close();
	?>

	</ul>
	</body>
	</html>

	
	

Код файла person.php

	<html>
	<head>
	<title>Запросить данные из БД</title>
	</head>
	<body>

	<dl>

	<?php
	// Соединиться с сервером БД
	mysql_connect("mysql.myhost.com", "user", "sesame") or die (mysql_error ());

	// Выбрать БД
	mysql_select_db("mydatabase") or die(mysql_error());

	// Получить данные из БД, в зависимости от значения id в URL
	$strSQL = "SELECT * FROM people WHERE id=" . $_GET["id"];
	$rs = mysql_query($strSQL);
	
	// Цикл по $rs
	while($row = mysql_fetch_array($rs)) {

		// Записать данные человека
		echo "<dt>Name:</dt><dd>" . $row["FirstName"] . " " . $row["LastName"] . "</dd>";
		echo "<dt>Phone:</dt><dd>" . $row["Phone"] . "</dd>";
		echo "<dt>Birthdate:</dt><dd>" . $row["BirthDate"] . "</dd>";

	}

	// Закрыть соединение с БД
	mysql_close();
	?>

	</dl>
	<p><a href="list.php">Return to the list</a></p>

	</body>

	</html>
	
	

Пример с адресной книгой достаточно прост, но показывает потенциал возможностей при работе с РНР и базами данных.

Представьте, что БД содержит 10,000 продуктов с детальным описанием. Сделав небольшие изменения в предыдущие файлы, вы легко создадите каталог продукции с более чем 10,000 страниц при помощи лишь одной базы данных и двух РНР-файлов.

Добро пожаловать в мир огромных вэб-сайтов, которые легко разрабатывать и обслуживать! Если вы освоили работу с БД, ваши вэб-решения уже никогда не будут прежними.



<< Урок 19: Вставка данных в базу данных

Урок 21: Удаление данных из базы данных >>