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

Особенности реализацииMySql

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

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

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

В настоящий момент MySQL не поддерживает:

  • Подзапросы (вложенные команды select). Большинство командSQL, использующих подзапросы, могут быть переписаны в виде нескольких запросов.

  • Транзакции. В настоящий момент механизм поддержки транзакций в MySQLнаходится на стадии бета-тестирования

  • Хранимые процедуры и триггеры

  • Внешние ключи. Хотя MySQLне поддерживает внешние ключи, синтаксис для описания внешних ключей в СУБД реализован для обеспечения совместимости с продуктами других производителей.

  • Представления

ВзаимодействиеPhp иMySql

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

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

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

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

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

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

Обычно логин и пароль пользователя устанавливаются системным администратором. Обычно, при работе под управлением ОС Windows, для обращения к MySQL достаточно указать в качестве хоста localhost, а в качестве имени пользователя и пароля использовать пустые строки.

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

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

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

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

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

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

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

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

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

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

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

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

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

Для удаления базы данных необходимо указать ее имя. Идентификатор соединения указывать не обязательно. Аналогичного результата можно достигнуть путем посылки sql-запроса "drop database".

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

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

Данная функция позволяет послать SQL запрос серверу базы данных. Параметрами функции являются строка с запросом и идентификатор сообщения (необязательный параметр). Функция возвращает идентификатор результата.

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

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

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

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

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

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

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

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

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

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

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

mysql_connect("localhost","","");

mysql_select_db("mybase");

$q=mysql_query("select snum,sname,city from salespeople");

echo mysql_error();

$number=mysql_num_rows($q);

while($r=mysql_fetch_array($q)) {

echo $r["snum"].' | '.$r["sname"].' | '.$r["city"].'<br>';

}

еcho "Всего продвцов: $number";

Проанализируем построчно представленную выше программу. В первой строке устанавливается соединение с сервером базы данных. Поскольку идентификатор соединения в явном виде не используется, функция mysql_connect не присваивает результат своей работы какой-либо переменной. Вторая строка устанавливает активной базу данных под названием mybase. В третьей строке осуществляется запрос к базе данных. Запрос можно описать следующим образом: "выбрать идентификатор, имя и город для всех продавцов из таблицы "Продавцы". Переменная $q будет содержать указатель на результирующий набор данных, полученный в ответ на запрос. В случае, если при попытке выполнить запрос произойдет какая-либо ошибка, функция mysql_error, вызываемая в четвертой строке, выведет на экран сообщение с описанием возникшей проблемы. Если запрос успешно выполнен, mysql_error ничего не выводит на экран. В пятой строке вызывается функция, определяющая количество записей (строк) в результирующем наборе данных. Фактически, количество записей равно количеству продавцов, зарегистрированных в базе данных.

После определения количества продавцов будет запущен цикл, обрабатывающий полученные записи. Изначально указатель результирующего набора установлен на первую запись. После первого вызова функции mysql_fetch_array, будет возвращен ассоциативный массив $r, содержащий элементы первой записи. Внутренний указатель результирующего набора будет автоматически передвинут на следующую запись. Последовательно вызывая функцию извлечения данных, можно обработать все записи. После обработки последней записи набора, функция mysql_fetch_array вернет значение "ложь". На этом работа цикла будет завершена. Внутри цикла будут выводиться элементы полученных записей. Обратиться к каждому элементу записи можно как к элементу ассоциативного массива с соответствующим именем.

После окончания цикла будет выведена строка, содержащая информацию о количестве продавцов.