Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

5 семестр / Инструм.средства / ЛЕКЦИИ / Лекция №5 Доступ к БД посредством CGI-скрипта

.doc
Скачиваний:
60
Добавлен:
17.02.2016
Размер:
71.68 Кб
Скачать

Доступ к базам данных посредством 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-форма. Если целью формы является сбор данных для последующей передачи их серверу, то такая форма должна обязательно содержать:

  1. Адрес CGI-скрипта (программы-обработчика, расположенной на некотором сервере), которому будут пересылаться данные из формы. При этом выполняется пересылка не всей страницы целиком, а только значений, соответствующих элементам управления формы, которая инициировала запуск программы-обработчика.

  2. Метод передачи данных (наиболее применяемые POST и GET).

  3. Некоторый объект формы, при нажатии на который произойдет пересылка данных.

Форма задается в 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

<?php     /* Соединяемся, выбираем базу данных */     $link = mysql_connect("mysql_host", "mysql_user", "mysql_password")         or die("Could not connect : " . mysql_error());     print "Connected successfully";     mysql_select_db("my_database") or die("Could not select database");     /* Выполняем SQL-запрос */     $query = "SELECT * FROM my_table";     $result = mysql_query($query) or die("Query failed : " . mysql_error());     /* Выводим результаты в html */     print "<table>\n";     while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {         print "\t<tr>\n";         foreach ($line as $col_value) {             print "\t\t<td>$col_value</td>\n";         }         print "\t</tr>\n";     }     print "</table>\n";     /* Освобождаем память от результата */     mysql_free_result($result);     /* Закрываем соединение */     mysql_close($link); ?>

Перечень функций:

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);

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