Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Метода ТОБД.doc
Скачиваний:
24
Добавлен:
13.04.2015
Размер:
8.25 Mб
Скачать

Задание 10. Удаление записей, таблиц и базы данных (delete)

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

DELETE FROM table

[WHERE condition] [LIMIT number]

Если просто записать

DELETE FROM table;

то удаляются все строки в таблице, так что будьте осторожны! Обычно ненужными оказываются какие-то определенные строки и они указываются при помощи конструкции WHERE. Это может случиться, если какая-то книга больше не продается или кто либо из клиентов длительное время ничего не заказывает:

delete from customers

where customerid=5;

Ниже (на рис. 3.265) приводится окно монитора с использованием оператора DELETE и результат его работы.

Рис. 3.265. Состав таблицы Customers после удаления пятой строки.

Конструкция LIMIT ограничивает количество удаляемых строк.

Удаление таблиц

Для этого используют оператор DROP TABLE.

DROP TABLE table;

Он удаляет все строки из таблицы и вместе с ними саму таблицу, так что будьте с ним поосторожней.

Удаление целой базы данных

Удаление базы данных осуществляется оператором - DROP DATABASE:

DROP DATABASE database;

В результате удаляются все строки, таблицы, индексы и сама база данных.

Дополнительная информация

В этой теме был рассмотрен обычный SQL, с которым приходится иметь дело при работе с базами данных MySQL.

Если хотите получить дополнительную информацию по SQL, обратитесь к истокам, почитайте о стандартах ANSI SQL, обратившись по адресу: http://www.ansi.org/

Дополнительные возможности MySQL по сравнению с ANSI SQL описаны на Web-сайте MySQL: http://www.mysql.com/.

Тема № 14.Php и MySql. Доступ к базе данных MySql из Web с помощью рнр

Цель работы: Получение практических навыков по связке MySQL и PHP.

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

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

  • Как работает архитектура Web-баз данных

  • Основные шаги выполнения запросов к базе данных через Web

  • Установка соединения

  • Получение информации о доступных базах данных

  • Выбор базы данных

  • Выполнение запроса к базе данных

  • Получение результатов запроса

  • Отсоединение от базы данных

  • Внесение новой информации в базу данных

  • Обеспечение безопасности базы данных

  • Прочие полезные функции PHP-MySQL

Задание 1. Изучение работы архитектуры Web-баз данных

Ранее мы в общих чертах выяснили, как работает архитектура Web-баз данных. Алгоритм работы содержит следующие шаги:

  1. Web-браузер пользователя выдает HTTP-запрос определенной Web-страницы. Например, пользователь ищет в таблице BOOKS, все книги, используя HTML-форму (рис. 3.266), исходный код HTML файла Lab15_00.php (рис. 3.267). Страница с результатами поиска будет называться Lab15_01.php (обработчик формы).

  2. Web-сервер принимает запрос на Lab15_01.php, извлекает этот файл и передает на обработку механизму РНР.

  3. Механизм РНР приступает к разбору сценария. Сценарий содержит команду соединения с базой данных и выполнения запроса (поиска книг). РНР открывает соединение с MySQL-сервером и отправляет соответствующий запрос.

  4. Сервер MySQL принимает запрос к базе данных, обрабатывает его и отправляет результат (список книг) обратно механизму РНР.

  5. Механизм РНР завершает выполнение сценария, что обычно включает в себя форматирование результатов запроса в HTML файл. После этого результат в виде HTML возвращается Web-серверу.

  6. Web-сервер пересылает HTML в браузер, и пользователь имеет возможность просмотреть запрошенный список книг.

База данных MySQL с именем BOOKS создана в предыдущей лабораторной работе, поэтому создадим поисковую HTML форму и подготовим код РНР для обработки формы, чтобы проиллюстрировать шаги алгоритма работы архитектуры Web-баз данных.

Начнем с поисковой HTML формы (рис. 3.266). Код для этой формы показан на рис. 3.267 (http://localhost/php/lab15_00.php).

Поисковая страница для базы данных BOOKS:

Рис. 3.266. Начальное содержимое формы (а) и форма с информацией (б).

Рис. 3.267. Листинг Lab15_00.php HTML формы для рис. 3.266.

После того как пользователь нажмет на кнопке , вызывается сценарийLab15_01.php. Все это представлено в листинге (рис. 3.268). Здесь мы рассмотрим, что делает упомянутый сценарий и как он работает.

Рис. 3.268. Листинг сценария обработчика Lab15_01.php формы для рис. 3.266.

Lab15_01.php - извлекает результаты запроса в базе данных MySQL и форматирует их для целей отображения.

Если в форму будет введена информация, как показано на рис. 3.266 (б), то результат показан на рис. 3.269.

Рис. 3.269. Результат вывода на экран обработчика Lab15_01.php

Если пользователь в качестве аргумента поиска укажет символ “М” (рис. 3.270), то результат показан на рис. 3.271.

Рис. 3.270. Исходные данные для обработчика Lab15_01.php

Рис. 3.271. Результат вывода на экран обработчика Lab15_01.php

Установка соединения

Для подключения к серверу MySQL в сценарии (рис. 3.268) присутствует такая строка:

@ $db = mysql_pconnect($Host, $User, $Password);

Потребуется указать имя узла (Host), на котором размещен сервер MySQL, имя пользователя (User), чтобы войти в него, и пароль (Password). Все это в принципе необязательно и если не указать все вышеперечисленное, функция воспользуется значениями по умолчанию — локальная машина вместо узла, имя пользователя, под которым запущен РНР, и пустой пароль.

В случае успеха функция вернет идентификатор связи с базой данных (который следует сохранить для дальнейшего использования), а в случае неудачи — значение false. Результат не стоит игнорировать, поскольку без соединения с базой данных работа невозможна. Это делает следующий код:

Как альтернативу, можно использовать другую функцию, которая делает практически то же самое — mysql_connect(). Единственное отличие состоит в том, что mysql_pconnect() устанавливает постоянное соединение с базой данных.

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

Может возникнуть вопрос, для чего это нужно. Ответ таков: соединение с базой данных предполагает некоторые непроизводительные затраты, что требует времени. Когда вызывается mysql_pconnect(), прежде чем она попытается подключиться к базе данных, она автоматически проверит, нет ли уже открытого постоянного соединения. Если есть, она не станет открывать новое. Это и время экономит, и предотвращает перегрузку сервера.

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

Помните, что количество соединений в MySQL, которые существуют одновременно, ограничено. Границу устанавливает параметр max_connections. Его задача (как и родственного ему параметра Apache MaxClients) — заставить сервер отвергать новые запросы на соединение, когда ресурсы узла заняты или когда программное обеспечение не функционирует.

Значения этих параметров можно изменять, редактируя файл конфигурации. Чтобы настроить MaxClients в Apache, следует править файл httpd.conf. Настройка max_connections в MySQL осуществляется за счет редактирования файла my.conf. Если вы пользуетесь постоянными соединениями, и практически каждой странице на вашем сайте требуется доступ к базе данных, вам понадобится постоянное соединение для каждого процесса Apache. Если же используются значения параметров, принятые по умолчанию, могут возникнуть определенные сложности. По-умолчанию Apache допускает до 150 соединений, a MySQL — только 100. В особо напряженное время соединений может не хватить. Поэтому лучше всего настроить параметры так, чтобы у каждого процесса Web-сервера было свое соединение, конечно, с оглядкой на технические возможности применяемых аппаратных средств.

Выбор базы данных

Работая с MySQL из командной строки (см. предыдущею лабораторную работу), необходимо указывать, какая база данных нужна:

use books;

То же самое необходимо и при подключении из Web. Это может сделать РНР-функция

В результате будет использоваться база данных с именем BOOKS. Можно также использовать соединение с базой данных, для которого требуется выполнить эту операцию (в нашем случае $db), однако, если его не указать, будет использоваться последнее открытое соединение. Если открытое соединение не существует, оно открывается по умолчанию, как если бы вызывалась mysql_connect().

Выполнение запроса к базе данных

Чтобы осуществить запрос, можно воспользоваться функцией mysql_query(). Однако прежде запрос необходимо настроить:

В этом случае будет отыскиваться значение, введенное пользователем ($term), в поле, которое указал пользователь ($search). Вы, наверное, обратили внимание на то, что мы употребили like, отдав ему предпочтение перед equal — толерантность никогда не бывает излишней.

Не забывайте, что запрос, отправляемый вами в MySQL, не требует в конце точки с запятой, в отличие от запроса, который вводится в среде монитора MySQL.

Теперь можно выполнить запрос:

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

Возможно, вместо функции mysql_query() воспользоваться функцией mysql_db_query(). Рассмотрим ее прототип:

int mysql_db_query(string database, string query,

[int database_connection] ) ;

Почти то же самое, только здесь можно указать базу данных, в которой требуется производить поиск. В каком-то смысле это комбинация функций mysql_select_db() и mysql_query().

Обе функции возвращают идентификатор результата (что позволяет получить результаты поиска) в случае успеха и значение false в случае неудачи. Идентификатор результата следует сохранить (так же, как в нашем случае с $result), чтобы извлечь из него некоторую пользу.

Получение результатов запроса

Разнообразие функций дает возможность получить результат различными способами. Идентификатор результата — это ключ доступа к строкам, возвращенным запросом, которых может быть нуль, одна и более.

В нашем примере использовались две функции:

mysql_num_rows()

и mysql_fetch_array().

Функция mysql_numrows() сообщает количество строк, которые возвращает запрос. В нее следует передать идентификатор результата.

Это полезно знать, если планируется обрабатывать или отображать результаты. Зная их количество, можно организовать цикл:

for ($i=0; $i <$num_results; $i++num ){

// обработка результатов

}

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

$row = mysql_fetch_array($result);

Имея $row в ассоциативном массиве, можно пройти каждое поле и должным образом его отобразить: