Опубликован: 08.05.2007 | Доступ: свободный | Студентов: 12882 / 3013 | Оценка: 4.13 / 3.77 | Длительность: 12:58:00
Лекция 10:

Доступ к базе данных MySQL

< Лекция 9 || Лекция 10: 12 || Лекция 11 >

Выбор записей

Кроме применения функций MySQL с оператором SQL INSERT для добавления записей в базу данных, можно также извлекать записи из таблицы базы данных с помощью оператора SQL SELECT.

Типичная форма ввода для выбора существующих записей из таблицы Directory показана ниже. В этом примере фиктивная компания, Company XYZ, имеет онлайн форму, которая позволяет пользователям ввести фамилию сотрудника и найти полное имя сотрудника, номер телефона и адрес e-mail.


Оператор SQL SELECT показан ниже:

SELECT * | [DISTINCT] field1 [,field2]... FROM TableName WHERE criteria 
ORDER BY FieldName1 [ASC|DESC] [,FieldName2 [ASC|DESC] ]...

Более подробно оператор SELECT рассматривается в приложении.

Следующий код используется для обработки формы DirectorySearch.php:

DirectorySearch.php 

<?php 

if ($_POST[submit] == "Search") 
{
	
  //Получение данных формы 
		
  $string = $_POST['search'];
		
  //Установление соединения с данными 
		
  $conn = mysql_connect('localhost','root','xyxyxy');
  
  //Выбор базы данных 
  
  $db = mysql_select_db('Membership', $conn);
		
  //Создание оператора SQL SELECT 
		
  $sql = "SELECT * FROM Directory WHERE LName = '$string'";
		
  $rs = mysql_query($sql, $conn);
 }

?>

<!DOCTYPE html PUBLIC "-//W3C/DTD/XHTML 1.0 Transitional//EN"
	"http://www.w3.org/TR/xhtml1/DTD/xhtml11-transitional.dtd">
	
	
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>Страница Web </title>

<style>
  
  body {margin:15px;font:10pt Verdana}
  td {vertical-align:top;border:solid 1px gray}
  input,textarea{border:0px}
  
  </style>
  
 </head>
 
 <body>
 
 <form action="DirectorySearch.php" method="post">
 <p>Введите ниже фамилию и нажмите кнопку "Search", 
чтобы найти номер телефона и адрес e-mail сотрудника</p>
 <table>
 <tr>
 <td colspan="2">Company XYZ Directory</td>
 </tr>
 <td><input type="text" size="15" name="SearchName"/></td>
 <td><input type="submit" value="Search" name="submit"/>
 </tr>
 </table>
  </form>
  
 <div>
 
 <?php
 
 if(!empty($_POST))
 {
	while($row = mysql_fetch_array($rs)) 
	{
	echo "Name: " .$row['FName'] . "  ";
	echo  $row['LName'] . "<br/>";
	echo "Telephone: " . $row['Telephone'] . "<br/>";
	echo "Email: " . $row['Email'] . "<br/>";
	}
	mysql_close($conn);
 }	
 ?>
 
 </div>
 </body>
 </html>
Пример 10.3.

Эта страница содержит два блока кода PHP. Первый выполняется, когда нажимается кнопка отправки формы "Search". Введенная пользователем фамилия присваивается скалярной переменной '$string'. Затем создается соединение с базой данных и формируется оператор SQL SELECT для выбора всех (*) полей таблицы записей, в которых поле 'lastname' совпадает со строкой фамилии, введенной пользователем. В конце выполняется оператор SQL. Если найдены подходящие записи, то множество записей присваивается переменной '$rs'.

Второй блок кода появляется в теле документа XHTML. Код, содержащий операторы echo или print, помещается обычно между открывающим и закрывающим тегами <body>, так что он может выводиться или форматироваться в соответствии с другими элементами страницы. Операторы echo и print, появляющиеся в блоках PHP, закодированные выше тега <html>, всегда появляются в верху страницы и предшествуют всем другим ее элементам.

Назначение этого блока кода состоит в выводе извлеченных записей, если в предыдущем блоке кода был выполнен оператор SQL. Сначала используется оператор if для проверки, что массив $_POST не является пустым. Если этот массив будет пустым, то это означает, что форма не была отправлена, и никакие записи не были извлечены. Если этот условный оператор отсутствует, то будет возникать ошибка, так как массив mysql_fetch_array не будет содержать никаких значений.

Затем используется цикл while для итераций по множеству записей. Во время каждой итерации по множеству записей функция mysql_fetch_array() создает ассоциативный массив (здесь этот массив назван $row ), содержащий значения полей текущей записи. Индексы массива соответствуют именам полей формы, а элемент массива соответствует значению поля. Каждая запись затем выводит $row['FName']значение поля 'FirstName', $row['LName'] -- значение поля 'LastName', $row['Telephone']значение поля 'Telephone', и $row['Email']значение поля 'Email'. Этот процесс продолжается, пока не будет достигнут конец множества записей, при этом массив $row каждый раз будет содержать новые значения.

После вывода всех записей соединение с базой данных закрывается с помощью функции mysql_close().

Ниже представлен пример вывода, созданного после поиска в каталоге.


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

DirectorySearch.php 

 <?php
 
 if(!empty($_POST))
 {
	
	while($row = mysql_fetch_array($rs)) 
	
	{
	
	echo "Name: " .$row['FName'] . "  ";
	echo  $row['LName'] . "<br/>";
	echo "Telephone: " . $row['Telephone'] . "<br/>";
	echo "Email: " . $row['Email'] . "<br/>";
 
	}
	
	if (mysql_affected_rows($rs) == 0)
	
	{
	
		echo "No records found!";
	
	}
	
	mysql_close($conn);
 }	
 ?>
 
 </div>
 </body>
 </html>

Показанный выше измененный сценарий содержит дополнительно функцию mysql_affected_rows(). Эта функция требует один параметр – ссылку на текущее множество записей $rs и определяет число строк, затронутых последней операцией SQL. Если возвращаемое функцией mysql_affected_rows() значение равно 0, то оператор SQL SELECT не затронул ни одной строки. Поэтому подходящих записей найдено не было.

Удаление записей

Оператор SQL DELETE используется для удаления существующих записей в базе данных.

Синтаксис оператора SQL DELETE показан ниже:

DELETE FROM Имя_Таблицы WHERE критерий

Более подробно оператор DELETE рассматривается в приложении.

Следующая форма представляет запись пользователя, которая будет удалена из таблицы базы данных Personnel. Щелчок на кнопке Delete вызывает процедуру PHP, которая выполняет оператор SQL DELETE для удаления этой записи из таблицы базы данных.


Кроме показанных выше элементов управления формы, страница включает также скрытое текстовое поле с именем "AutoNum" со значением, равным полю AutoNum таблицы базы данных. Это поле используется для уникальной идентификации каждой записи. Следующий код демонстрирует, как работает страница:

DirectorySearch.php 

<?php
	
if ($_POST['submitb']=="Delete Record") 
    {
		
     $conn = mysql_connect('localhost','root','xyxyxy');
     $db = mysql_select_db('Membership',$conn);
     $sqlDelete = "DELETE FROM Personnel WHERE AutoNum =" . $_POST['AutoNum'];
     $rsDelete = mysql_query($sqlDelete,$conn);	
	
	 if(mysql_affected_rows($rsDelete) == 1)
	  {
	
	    echo "Запись успешно удалена!";
	
	  }
	
     mysql_close($conn);
		
    }
	
?>

После нажатия кнопки "Delete Record" устанавливается соединение с базой данных MySQL. Затем создается оператор SQL DELETE для удаления записи из таблицы Personnel со значением поля AutoNum, равным значению скрытого текстового поля AutoNum. Затем оператор SQL выполняется. Результаты работы функции mysql_query() присваиваются переменной $rsDelete. Последний шаг состоит в проверке, что удаление записи прошло успешно, и в выводе подтверждающего сообщения. Функция mysql_affected_rows() используется для определения числа строк в множестве результатов ODBC или числа строк, затронутых оператором mysql_query(). Так как будет удалена только одна запись, то результат mysql_affected_rows() равный 1 означает, что запись удалена успешно. В конце соединение с базой данных закрывается.

< Лекция 9 || Лекция 10: 12 || Лекция 11 >
Максим Матросов
Максим Матросов
Наталья Джабасова
Наталья Джабасова