
5 семестр / Инструм.средства / ЛЕКЦИИ / Лекция №5 Доступ к БД посредством CGI-скрипта
.doc
Доступ к базам данных посредством CGI-скрипта, написанного на языках HTML и PHP
Общая схема доступа к базам данных с использованием CGI-скриптов имеет вид:
<="" p="">
Спецификация CGI описывает формат и правила обмена данными между программным обеспечением WWW-сервера и запускаемой программой и представляет собой общую среду и набор протоколов для внешних приложений, которые используются при взаимодействии с Web-сервером.
CGI-программа (CGI-скрипт) представляет собой программу локальной операционной системы сервера (в двоичном виде или в виде программы для интерпретатора), которая может быть вызвана из среды WWW. Для инициирования CGI достаточно, чтобы в URL-адресе был указан путь до запускаемой программы. Программное обеспечение WWW-сервера исполняет эту программу, передает ей входные параметры и возвращает результаты ее работы, как результат обработки запроса, клиенту.
С целью облегчения администрирования CGI-программ, а также для удовлетворения требованиям безопасности CGI-программы группируются в одном или нескольких явно указанных серверу каталогах. При выполнении лабораторной работы в качестве таких каталогов выступают каталоги cgi-bin в домашней директории пользователя или в директории public_html. При этом
-
права доступа для каталога, в котором хранятся CGI-скприпты, должны быть самые широкие, иначе скрипт не сможет создавать файлы, нужные ему для работы (кроме того, такие же права должны быть и у файлов, к которым обращается скрипт);
-
файлы CGI-скриптов (как, правило, с расширением cgi) должны быть обязательно исполняемыми.
Общепринятым средством организации интерфейса с пользователем в WWW-среде является HTML-форма. Если целью формы является сбор данных для последующей передачи их серверу, то такая форма должна обязательно содержать:
-
Адрес CGI-скрипта (программы-обработчика, расположенной на некотором сервере), которому будут пересылаться данные из формы. При этом выполняется пересылка не всей страницы целиком, а только значений, соответствующих элементам управления формы, которая инициировала запуск программы-обработчика.
-
Метод передачи данных (наиболее применяемые POST и GET).
-
Некоторый объект формы, при нажатии на который произойдет пересылка данных.
Форма задается в HTML-документе с помощью тега FORM. Все элементы управления находятся внутри контейнера <FORM>...</FORM>.
<FORM action="http://.......cgi" method="GET"|"POST"
enctype="encodingType" name="formName" target="windowName"
onSubmit="Handler">
... Поля формы ...
</FORM>
Среди атрибутов HTML-формы для целей CGI-программирования наиболее важны
-
action. Этот атрибут задает URL-адрес программы (CGI-скрипта), которая будет обрабатывать данные формы. Если он опущен, используется URL-адрес текущего документа;
-
method Задается метод. По умолчанию предполагается GET.
При нажатии некоторой кнопки на форме HTML документа происходит передача данных броузером серверу, на котором находится программа-обработчик данных. Основная работа такой программы заключается в:
-
получении данных формы HTML-документа в виде строки, в которой перечислены значения всех элементов HTML формы, инициировавшей запуск программы (данная строка записана в соответствие с четко определенным форматом);
-
разборе полученной строки;
-
обработке данных (например, занесение полученных значений в базу данных или выборка некоторых записей из базы данных по полученным значениям и т.д. и т.п.);
-
формировании HTML-документа, который будет передан сервером программе-броузеру.
Обработка CGI-скриптом данных формы составляет шаблонную часть скрипта.
Одна из наиболее удобных особенностей PHP - это способность автоматически передавать значения переменных из HTML-форм в переменные PHP. PHP автоматически генерирует набор переменных, имена которых совпадают с именами объектов в HTML-форме и содержащих значения данных объектов. В результате отпадает необходимость в выполнении рутинного преобразования, связанного с разбором последовательности
имя=значение&имя1=значение1&...&имяN=значениеN
Для связи с любой из СУБД РНР в своем наборе имеет ряд функций, которые очень похожи между собой и имеют одинаковую логику работы и аналогичные параметры.
В приведенной ниже перечне представлен минимальный набор функций, необходимых для написания PHP-программ, общающихся с СУБД MySQL.
Примеры
Этот пример показывает, как соединиться с базой данных, выполнить запрос, распечатать результат и отсоединиться.
Пример 1. Пример работы с MySQL
|
Перечень функций:
mysql_affected_rows -- Возвращает число затронутых прошлой операцией рядов.
mysql_change_user -- Изменяет пользователя для указанного соединения.
mysql_client_encoding -- Возвращает кодировку соединения
mysql_close -- Закрывает соединение с сервером MySQL
mysql_connect -- Открывает соединение с сервером MySQL
mysql_create_db -- Создаёт базу данных MySQL
mysql_data_seek -- Перемещает внутренний указатель в результате запроса
mysql_db_name -- Возвращает название базы данных
mysql_db_query -- Переключается к указанной базе данных и посылает запрос
mysql_drop_db -- Уничтожает базу данных MySQL
mysql_errno -- Возвращает численный код ошибки выполнения последней операции с MySQL
mysql_error -- Возвращает строку ошибки последней операции с MySQL.
mysql_escape_string -- Экранирует SQL спец-символы для mysql_query.
mysql_fetch_array -- Обрабатывает ряд результата запроса, возвращая ассоциативный массив, численный массив или оба.
mysql_fetch_assoc -- Обрабатывает ряд результата запроса и возвращает ассоциативный массив.
mysql_fetch_field -- Возвращает информацию о колонке из результата запроса в виде объекта.
mysql_fetch_lengths -- Возвращает длину каждого поля в результате.
mysql_fetch_object -- Обрабатывает ряд результата запроса и возвращает объект
mysql_fetch_row -- Орабатывает ряд результата запроса и возвращает неассоциативный массив.
mysql_field_flags -- Возвращает флаги указанного поля результата запроса.
mysql_field_len -- Возвращает длину указанного поля.
mysql_field_name -- Возвращает название указанной колонки результата запроса.
mysql_field_seek -- Устанавливает внутренний указатель поля на переданное смещение.
mysql_field_table -- Возвращает название таблицы, которой принадлежит указанное поле.
mysql_field_type -- Возвращает тип указанного поля результата запроса.
mysql_free_result -- Освобождает память от результата запроса
mysql_get_client_info -- Возвращает данные о MySQL-клиенте
mysql_get_host_info -- Возвращает информацию о соединении с MySQL
mysql_get_proto_info -- Возвращает информацию о протоколе MySQL
mysql_get_server_info -- Возвращает информацию о сервере MySQL
mysql_info -- Возвращает информацию о последнем запросе
mysql_insert_id -- Возвращает ID, сгенерированный при последнем INSERT-запросе.
mysql_list_dbs -- Возвращает список баз данных, доступных на сервере.
mysql_list_fields -- Возвращает список колонок таблицы
mysql_list_processes -- Возвращает список процессов MySQL
mysql_list_tables -- Возвращает список таблиц базы данных MySQL
mysql_num_fields -- Возвращает количество полей результата запроса
mysql_num_rows -- Возвращает количество рядов результата запроса
mysql_pconnect -- Устанавливает постоянное соединение с сервером MySQL.
mysql_ping -- Проверяет соединение с сервером и пересоединяется при необходимости
mysql_query -- Посылает запрос MySQL
mysql_real_escape_string -- Экранирует специальные символы в строке, используемой в SQL-запросе, принмимая во внимание кодировку соединения.
mysql_result -- Возвращает данные результата запроса
mysql_select_db -- Выбирает базу данных MySQL
mysql_set_charset -- Устанавливает кодировку MySQL по умолчанию
mysql_stat -- Возвращает текущий статус сервера
mysql_tablename -- Возвращает имя таблицы, содержащей указанное поле
mysql_thread_id -- Возвращает ID текущего потока
mysql_unbuffered_query -- Посылает MySQL SQL-запрос без авто-обработки результата и её буфферизации.
Подробное описание функций можно посмотреть на http://www.php.su/functions/?cat=mysql.
Общая схема написания PHP-программы, выполняющей взаимодействие с базой данных, мало отличается от структуры CGI-скрипта, написанного любыми другими средствами, разница состоит лишь в используемых средствах:
-
подключиться к серверу баз данных и зарегистрироваться;
-
выбрать базу данных, которая будет использоваться;
-
отправить запрос SQL на сервер и получить данные;
-
отключиться от сервера баз данных. mysql_close($db);
При этом остаются актуальными все замечания, сделанные в предыдущей лабораторной работе относительно установки переменных окружения и обеспечения мер безопасности при работе с базой данных.