- •Технология организации баз данных и знаний
- •Методические указания к выполнению лабораторных работ
- •Методические указания к выполнению лабораторных работ
- •Предисловие
- •Библиографический список
- •Лабораторная работа № 1 Тема №1. ИнсталляцияMySqLи создание локального сервера
- •1. Цель работы
- •2. Основные технические возможности
- •3. Описание установки
- •4. Порядок выполнения работы
- •5. Содержание отчета
- •Лабораторная работа № 1
- •6. Содержание отчета
- •Лабораторная работа № 2 Тема №1. Создание баз и таблиц данных
- •1. Цель работы
- •2. Основные сведения
- •3. Программа работы
- •4. Указания к выполнению работы
- •3. Программа работы
- •00 Проверка моего домена с именем Moy.Loc
- •4. Указания к выполнению работы
- •5. Содержание отчета
- •3. Указания к выполнению работы
- •Задание 2: Разработать html-форму с методом Post
- •Тема №2. Передача значений переменным в сценариях php. Использование возможностей метода get без html-формы для передачи значений переменных в сценариях php
- •Тема №3. Создание формы и рнр-сценария в одном файле
- •Задание 1: Получение данных из текстового поля
- •I курсив
- •Тема №4. Использование чисел. Управляющие структуры
- •Тема №5. Использование управляющей структурыswitch
- •Тема № 6. Использование регулярных выражений в сценариях рнр
- •Проверка ошибок
- •Задание 1. Вывод информации о ошибочно заполненных полях формы
- •Задание 2. Использование функций пользователя для контроля полей формы
- •Задание 3. Проверка ограничений в текстовом поле.Lab6_0_2.Php
- •Задание 4. Специфика имени пользователя. Lab6_0_3.Php
- •Задание 5. Специфика имени пользователя с помощью JavaScript. Lab6_0_4.Php
- •Тема №7. Работа с массивами
- •Задание 1. Означивание массива и вывод на экран. Lab7_0.Php.
- •Задание 4. Сортировка массива.Lab7_3.Php.
- •Тема №8. Функции в сценариях рнр
- •Задание 1. Вложенные функции.Lab8_0_0.Php
- •Задание 2. Объявление функций внутри других функций.Lab8_0.Php
- •Задание 3. Возврат значений функцией.Lab8_1.Php
- •Задание 4. Возврат нескольких значений функцией.Lab8_2.Php
- •Задание 5. Возвращение функцией нескольких величин.Lab8_3.Php
- •Задание 6. Рекурсивные функции .Lab8_4.Php
- •Задание 7. Функции-переменные.Lab8_5.Php
- •Задание 8. Построение библиотек функций.Lab8_6_0.Php.
- •Задание 9. Построение шаблона сайта.Lab8_7_0.Php.
- •Тема №9. Использование файлов для хранения данных в сценариях рнр
- •Создание сценария загрузки.
- •Задание 3. Сохранение пользовательских данных в текстовом файлеLab9_5.Php
- •Задание 4. Сохранение пользовательских данных в текстовом файлеLab9_6_0.Php
- •Тема № 10. Работа с каталогами в сценариях рнр
- •Тема №11. Создание панели управления файлами
- •Задание 1. Разработать форму и сопутствующее ей приложение для панели управления файлами.
- •Тема № 12.Работа с базой через монтторMySql и PhpMyAdmin
- •Задание 1. Создать базу данных через командную строку
- •Задание 3. Вставка данных в базу данных
- •Задание 4. Создание командных файлов и файлов сценариев для вставки данных в базу данных.
- •Тема № 13. Извлечение данных из базы данных
- •Задание 1. Оператор выборки данныхSelect
- •Задание 2. Извлечение данных по определенному критерию
- •Задание 3. Извлечение данных из нескольких таблиц
- •Задание 4. Поиск несоответствующих строк
- •Задание 5. Использование псевдонимов имен таблиц (as)
- •Задание 6. Извлечение данных в определенном порядке
- •Задание 7. Группировка и агрегирование данных
- •Задание 8. Обновление записей в базе данных (update)
- •Задание 10. Удаление записей, таблиц и базы данных (delete)
- •Тема № 14.Php и MySql. Доступ к базе данных MySql из Web с помощью рнр
- •Задание 1. Изучение работы архитектуры Web-баз данных
- •Задание 2. Проверка и фильтрация данных, исходящих от пользователя. Использование объектно-ориентированного синтаксисаPhp
- •Задание 3. Внесение новой информации в базу данных. Проверка и фильтрация данных, исходящих от администратора
- •Задание 4. Создание и удаление баз данных
- •Содержание
Задание 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-баз данных. Алгоритм работы содержит следующие шаги:
Web-браузер пользователя выдает HTTP-запрос определенной Web-страницы. Например, пользователь ищет в таблице BOOKS, все книги, используя HTML-форму (рис. 3.266), исходный код HTML файла Lab15_00.php (рис. 3.267). Страница с результатами поиска будет называться Lab15_01.php (обработчик формы).
Web-сервер принимает запрос на Lab15_01.php, извлекает этот файл и передает на обработку механизму РНР.
Механизм РНР приступает к разбору сценария. Сценарий содержит команду соединения с базой данных и выполнения запроса (поиска книг). РНР открывает соединение с MySQL-сервером и отправляет соответствующий запрос.
Сервер MySQL принимает запрос к базе данных, обрабатывает его и отправляет результат (список книг) обратно механизму РНР.
Механизм РНР завершает выполнение сценария, что обычно включает в себя форматирование результатов запроса в HTML файл. После этого результат в виде HTML возвращается Web-серверу.
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 в ассоциативном массиве, можно пройти каждое поле и должным образом его отобразить: