Тема 7. Взаимодействие с СУБД

Опубликовано пользователем Бессонов Л.В. 15.03.2010г.

Системы управления базами данных (СУБД) предоставляют универсальный механизм накопления, хранения и обработки больших объёмов информации. В веб-разработках СУБД применяются достаточно широко. База данных может хранить как сравнительно небольшой объём информации (например, список страниц сайта), так и огромные количества информации (например, записи курсов покупки/продажи валют с посекундной детализацией за несколько лет).

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

Соединение с СУБД

СУБД — это приложение, запущенное на некотором компьютере. Также как веб-сервер это приложение имеет архитектуру "Клиент-Сервер". То есть серверная часть этого приложения находится в постоянном ожидании запросов, при получении запроса выполняет этот запрос и отсылает клиенту результат.

Веб-приложение должно иметь возможность соединяться с СУБД, посылать запросы, получать результаты и затем эти результаты обрабатывать.

Далее будем рассматривать взаимодействие с СУБД на примере СУБД MySQL. Это наиболее распространённая среди веб-разработчиков в настоящее время СУБД.

Соединение осуществляется при помощи функции mysql_connect. Документация гласит:

  1. resource mysql_connect (
  2. [string $server = ini_get("mysql.default_host")
  3. [, string $username = ini_get("mysql.default_user")
  4. [, string $password = ini_get("mysql.default_password")
  5. [, bool $new_link = false [, int $client_flags=0]]]]]
  6. )

Разберёмся в формальных параметрах и их значениях. Квадратные скобки в описании синтаксиса означают что параметр является необязательным.

server
Строка, содержащая имя или адрес хоста, на котором установлена СУБД mysql. Также может содержать номер порта, который прослушивает сервер MySQL. Таким образом, значения этого параметра могут быть, например: localhost, mysql.my_org.ru:1234, 127.0.0.1:5678 и прочие. Чаще всего СУБД MySQL установлена на том же компьютере, где расположен веб-сервер, поэтому в большинстве случаев придётся указывать 'localhost'. Кроме того, в описание синтаксиса показано что этот параметр имеет значение по умолчанию, которое хранится в файле настроек PHP.INI (чтобы оно было верно настроено, нужно самостоятельно это значение туда занести, добавив в нужный раздел строку вида 'default_host="localhost"').
username
Имя пользователя, которое будет передано СУБД MySQL для прохождения аутентификации. Также как в случае с параметром server, возможно задание имени пользователя по умолчанию в файле PHP.INI.
password
Пароль, необходимый для аутентификации пользователя.
new_link
По умолчанию этот параметр имеет значение false. Это означает, что при вторичном и последующих вызовах mysql_connect с теми же параметрами (сервер, логин, пароль) не будет создаваться новое соединение с сервером. Вместо этого будет возвращена в качестве результата ссылка на уже открытое соединение. Если установить значение true, при каждом вызове mysql_connetn будет открываться новое соединение.
client_flags
Этот параметр указывает возможные особые настройки соединения, например, применение сжатия к передаваемым результатам и т.п.

В качестве результата mysql_connect возвращает ссылку на созданное соединение с сервером. Положив эту ссылку в переменную, можно затем указывать ещё в функциях, обращающихся к СУБД. Например, так:

  1. <?php
  2. // Соединяется с сервером MySQL, запущенным на localhost
  3. $link = mysql_connect('localhost', 'vasya', '123');
  4. if (!$link) {
  5. // В случае ошибки выдаём сообщение и прерываем выполнение скрипта
  6. die('Не удалось соединиться с БД. Ошибка: ' . mysql_error());
  7. }
  8. print 'Успешное соединение';
  9. // Закрываем ранее открытое соединение
  10. mysql_close($link);
  11. ?>

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

  1. bool mysql_select_db (string $database_name [, resource $link_identifier])

В качестве первого аргумента функции передаётся имя базы данных. Второй аргумент не является обязательным, в нём указывается ссылка на открытое соединение. Если второй аргумент не указан, будет выбрано первое открытое соединение. Рассмотрим необходимость этого аргумента на примере.

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

  1. <?php
  2. // Соединяется с первым сервером
  3. $link1 = mysql_connect('server.ru:3306', 'vasya', '123');
  4. if (!$link1) {
  5. // В случае ошибки выдаём сообщение и прерываем выполнение скрипта
  6. die('Не удалось соединиться с Server.RU. Ошибка: ' . mysql_error());
  7. }
  8. $link2 = mysql_connect('localhost', 'vasya', '321');
  9. if (!$link2) {
  10. // В случае ошибки выдаём сообщение и прерываем выполнение скрипта
  11. die('Не удалось соединиться с localhost. Ошибка: ' . mysql_error());
  12. }
  13. print 'Оба соединения успешно установлены.';
  14. // Подключаемся к базе WorkBase на Server.RU
  15. mysql_select_db('WordBase', $link1);
  16. // Подключаемся к базе HomeBase на localhost
  17. mysql_select_db('HomeBase', $link2);
  18. // Здесь следует код, реализующий операции с базами данных
  19.  
  20. // Закрываем ранее открытые соединения
  21. mysql_close($link1);
  22. mysql_close($link2);
  23. ?>

Запросы и обработка результатов

Баннер SGU.RU