Скачиваний:
34
Добавлен:
04.04.2013
Размер:
111.62 Кб
Скачать

6

PHP и MySQL. Лекция 1

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

Самым простым способом организации хранилища данных является использование текстовых файлов. Можно хранить данные в одном или нескольких текстовых файлах, а внутри файлов отделять элементы данных друг от друга при помощи символов – разделителей. Такой способ организации данных может быть эффективен при небольшом количестве хранимой и обрабатываемой информации. Однако для того, чтобы оперировать данными, хранимыми в текстовых файлах, необходимо разработать набор подпрограмм для добавления, удаления, модификации и выборки данных. В случае если структура данных будет изменена, подпрограммы управления данными придется переписывать.

Для того чтобы избежать подобных трудностей, можно использовать базы данных. Оперировать данными, занесенными в базу данных (БД), можно при помощи СУБД – системы управления базой данных. СУБД предоставляют интерфейс, при помощи которого можно организовывать базы данных с произвольной внутренней структурой и управлять данными, расположенными в них.

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

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

  1. Браузер посылает запрос веб-серверу на формирование HTML- страницы

  2. Веб-сервер запускает интерпретатор PHP для выполнения скрипта, формирующего HTML-страницу

  3. В процессе работы скрипта осуществляется обращение к базе данных для выборки информации, соответствующей параметрам запроса, посланного браузером

  4. На основе информации, выбранной из базы данных, PHP- скрипт формирует HTML-страницу

  5. Веб-сервер возвращает браузеру сформированную HTML-страницу

  6. Браузер интерпретирует HTML-инструкции, содержащиеся в теле полученной страницы, и выводит ее содержимое на экран монитора

В настоящее время для организации хранилища данных веб-приложений наиболее часто используется СУБД MySQL.

MySQL является компактным и простым в эксплуатации сервером баз данных, доступным для платформ Unix, Windows NT, Windows 9x. При функционировании под управлением ОС Unix СУБД использует потоки, что позволяет создать на базе MySQL высокопроизводительный и хорошо масштабируемый сервер баз данных.

MySQL поддерживает стандарты начального уровня ANSI SQL92 и ODBC. Приложения базы данных могут быть реализованы при помощи популярных языков высокого уровня, таких как C, Perl, PHP и другие. СУБД позволяет оперировать таблицами с суммарным объемом данных до 4 Гбайт.

В PHP реализован набор функций, позволяющих скрипту взаимодействовать с MySQL. Для того чтобы воспользоваться базой данных, необходимо установить соединение между клиентской программой (в данном случае программой, написанной на языке PHP) и сервером MySQL. Установить соединение можно при помощи функции:

mysql_connect("хост[:порт][сокет]", "имя пользователя", "пароль")

Функция получает три входных параметра: хост, имя пользователя и пароль. Хост – имя сервера, на котором установлена СУБД. В случае, если веб-сервер и сервер базы данных работают на одной машине, значение параметра хост имеет значение "localhost". После имени хоста можно так же указать порт и путь к сокету. Это необходимо в случае, если в настройках используются порт и сокет, отличные от установленных по умолчанию.

Имя пользователя – логин пользователя, которому разрешен доступ к СУБД.

Пароль – пароль пользователя, которому разрешен доступ к СУБД.

Функция возвращает идентификатор соединения в случае успеха и значение "ложь" при неудаче. Идентифи­катор соединения будет использоваться при вызове всех функций, посылающих запросы серверу MySQL.

Если сделать повторный вызов rnysql_connect с теми же аргументами, новое соединение с сервером не будет установлено; будет возвращен идентифика­тор уже открытого соединения.

Обычно логин и пароль пользователя устанавливаются системным администратором.

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

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

mysql_close(идентификатор соединения)

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

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

mysql_select_db("имя базы данных",[идентификатор соединения])

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

Создать базу данных можно при помощи функции

mysql_create_db("имя базы данных",[идентификатор соединения])

Другой возможностью для создания новой базы данных является посылка запроса "create database" при помощи функции mysql_query, которая будет рассмотрена ниже.

Удалить базу данных со всем ее содержимым можно при помощи функции

mysql_drop_db("имя базы данных",[идентификатор соединения])

Аналогичного результата можно достигнуть путем посылки sql-запроса "drop database".

Одной из важнейших функций является функция отправки SQL-запроса

mysql_query ("запрос",[идентификатор соединения])

Функция возвращает идентификатор результата. Для команд определения данных, таких как CREATE, ALTER, DROP, идентификатор результата указывает на успех или неудачу при выполнении запроса.

Для команд манипулирования данными, таких как DELETE, INSERT, UPDATE, идентификатор результата позволяет узнать количество обработанных строк.

Для команды SELECT идентификатор результата является указателем на результирующий набор выбранных данных.

Узнать количество записей, выбранных в ответ на запрос, можно при помощи функции

mysql_num_rows (идентификатор результата)

Функция возвращает количество записей в наборе, ассоциированном с идентификатором результата. Следует заметить, что речь идет только об идентификаторе результата, полученного после запроса типа select.

Получить доступ к результатам выборки можно при помощи функций

mysql_fetch_row (идентификатор результата)

mysql_fetch_array (идентификатор результата)

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

После выполнения mysql_query указатель соответствующего результирующего набора устанавливается на первой записи. Последовательный вызов функции позволяет получить доступ ко всем записям результирующего набора.

Функции mysql_fetch_array и mysql_fetch_row отличаются типом возвращаемого результата:

  • mysql_fetch_array возвращает ассоциативный массив, названия элементов которого соответствуют названиям столбцов в запросе типа select (и, соответственно, в полученном результате);

  • mysql_fetch_row возвращает массив, индексированный числами, начиная с элемента 0 (последовательность элементов массива соответствует последовательности их перечисления в запросе).

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

mysql_free_result(идентификатор результата)

В процессе работы с базой данных могут возникать различные ошибки (например, могут быть обнаружены синтаксические ошибки в SQL-запросах.). Для того, чтобы получить сообщение об ошибке, возвращенное сервером MySQL, можно воспользоваться функцией

mysql_error (идентификатор соединения)

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

Рассмотрим пример, иллюстрирующий взаимодействие PHP и MySQL. Проектируемое веб-приложение должно предоставить посетителю сайта возможность заполнить и отправить форму, содержащую поля «Имя» и «Почтовый адрес». Данные, отправленные посетителем должны храниться в базе данных. Для просмотра информации, отправленной пользователями, должен быть реализован отдельный скрипт.

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

Поле

Тип данных

Описание

id

id int not null primary key auto_increment

Идентификатор посетителя

person

varchar(255) not null

Имя посетителя

name

mail varchar(255) not null

Почтовый адрес

База данных будет называться testbase. Для создания базы необходимо запустить входящий в состав СУБД консольный клиент mysql.exe (для OC Windows) и выполнить команду

create database testbase;

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

init.php

<?

if (!mysql_connect("localhost","root","")) die("Ошибка соединения");

mysql_select_db('testbase');

mysql_query("create table users(

id int not null primary key auto_increment,

person varchar(255) not null,

mail varchar(255) not null

)");

?>

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

input.php

<html>

<body>

<?

if (isset($ok)) {

if (!mysql_connect("localhost","root","")) die("Ошибка соединения");

mysql_select_db('testbase');

if (trim($person)=='') echo 'Необходимо ввести имя<br>';

elseif (trim($mail)=='') echo 'Необходимо ввести адрес<br>';

else {

$person=addslashes($person);

$mail=addslashes($mail);

mysql_query("insert into users values(NULL,'$person','$mail')");

echo 'Данные сохранены<br>';

}

}

?>

<form action="input.php" method="post">

Имя: <input type="text" name="person"><br>

Адрес: <input type="text" name="mail"><br>

<input type="submit" name="ok" value="ok">

</form>

</body>

</html>

При первой загрузке страницы отображается форма для ввода данных. При нажатии на кнопку «ok» страница перезагружается. Устанавливается соединение с базой данных. В случае обнаружения пустых полей в форме выводится сообщение об ошибке. Если пустые поля не обнаружены, в таблицу users добавляется новая запись с полученными параметрами и отображается сообщение об успешном добавлении данных.

После выполнения скрипта, вне зависимости от результатов его работы, вновь отображается форма.

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

output.php

<html>

<body>

<?

if (!mysql_connect("localhost","root","")) die("Ошибка соединения");

mysql_select_db('testbase');

$q=mysql_query("select * from users order by person");

while ($r=mysql_fetch_array($q))

echo $r['id'].' '.$r['person'].' '.$r['mail'].'<br>';

?>

</body>

</html>

Скрипт устанавливает соединение с базой данных, отправляет запрос на выборку всех записей о посетителях (записи сортируются по имени посетителя) и отображает выбранные записи в формате

Идентификатор Имя Адрес

Соседние файлы в папке 3_Язык РНР