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

Справочный материал по основным языкам программирования и верстки сайтов.

Готовая методика создания простых и сложных динамичных сайтов, с использованием PHP и MySQL.

Использование веб-редактора Adobe Dreamweaver в разработке сайтов.

Использование графических редакторов Adobe Flash, Adobe Photoshop, Adobe Fireworks в подготовке веб-графики.

Разработка веб-сайтов под "ключ".

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

РНР и MySQL. Соединение с сервером MySQL. Соединение с базой данных

Соединение с базой данных

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

  • фрагмент памяти на жестком диске — файл;
  • каталог — файл, хранящий список других файлов;
  • внешнее устройство или сетевая карта — это тоже файл, только специального типа.

Такой подход позволял использовать для всех операций привычную каждому программисту схему взаимодействия:

  • Открыть ресурс.
  • Записать или прочитать из ресурса данные.
  • Закрыть ресурс.

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

При работе с MySQL из РНР используются два вида дескрипторов:

  • дескриптор соединения — индефицирует соединение с сервером: например, если одним приложением одновременно открыты соединения с двумя различными серверами, то для направления запроса по нужному адресу оно будет хранить два разных дескриптора, которые и будут передавать функциям в качестве параметра. Получить два дескриптора для одного и того же сервера с одинаковыми параметрами подключения нельзя — в этом случае библиотека вернет уже существующий дескриптор;
  • дескриптор результирующей таблицы — предназначен для доступа к результату выполнения запроса. Взаимодействие РНР-приложения и сервера MySQL происходит по клиент-серверной технологии: приложение отправляет серверу SQL-запрос, на который тот возвращает результирующую таблицу, идентифицированную данным дескриптором.

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

Соединение с сервером MySQL

В первую очередь следует установить соединение с сервером при помощи функции mysql_connect(), которая имет следующий синтаксис:

resource mysql_connect ([$server [, $username [, $password [, $new_link
[, $client_flags]]]]])

Эта функция устанавливает соединение с сервером MySQL, сетевой адрес которого задается параметром $server. Вторым и третим аргументами этой функции являются имя пользователя базы данных $username и его пароль $password соответственно.

По умолчанию повторный вызов функции mysql_connect() с теми же аргументами не приводит к установлению нового соединения, вместо этого функция возвращает дескриптор уже существующего соединения. Если четвертому параметру $new_link присвоить значение true, будет открыто новое соединение с сервером.

Параметр $client_flags должен быть комбинацией из следующих констант:

  • MYSQL_CLIENT_COMPRESS — предписывает использование протокола сжатия при обмене информации между сервером и клиентом;
  • MYSQL_CLIENT_IGNORE_SPACE — в SQL-запросах после имен функций разрешается использование пробелов;
  • MYSQL_CLIENT_INTERACTIVE — ждать interactive_timeout секунд до закрытия соединения, если между сервером и клиентом не происходит обмена данными.

Примечание. Все аргументы функции являются не обязательными. В случае их отсутствия, по умолчанию, для этой функции устанавливаются следующие параметры: server = 'localhost: 3306', username принимает значение владельца сервера, а password — пустую строку.

В случае успеха функция возвращает дескриптор соединения с сервером, при неудаче возвращает значение false.

Рассмотрим пример.

<?php
$dblocation="localhost"; //имя сервера
$dbuser="root"; //имя пользователя
$dbpasswd=""; //пароль
$dbcnx=@mysql_connect($dblocation, $dbuser, $dbpasswd);
if (!$dbcnx) //если дескриптор равен 0, соединение не установлено
{
exit("<p>В настоящий момент сервер базы данных недоступен, поэтому корректное отображение страницы невозможно </p>");
}
else
{
echo("<p> Соединение установлено</p>");
}
?>

Примечание. Для подавления вывода сообщений об ошибках, генерируемых РНР в окно браузера, в примере перед функцией mysql_connect() размещен символ @.

Переменные $dblocation, $dbuser, $dbpasswd хранят имя сервера, имя пользователя и пароль и, как правило, прописываются в отдельном файле(к примеру, config.php), который потом вставляется в каждый РНР-файл, содержащий код для работы с MySQL.

Если код не срабатывает, это может означать, что сервер базы данных не запущен. О том как запустить сервер описывается ЗДЕСЬ.

Соединение с базой данных

После того как соединение установлено, необходимо выбрать базу данных при помощи функции mysql_select_db(), которая эквивалентна вызову каманды USE в консольном клиенте mysql. Функция имеет следующий синтаксис:

bool mysql_select_db ($datebase_name [, $link_identifier])

Функция принимает в качестве аргументов название выбираемой базы данных $datebase_name и дескриптор соединения $link_identifier, который ранее был возвращен функцией mysql_connect(). Функция возвращает true при успешном выполнении операции и false — в противном случае.

Операция установки соединения с СУБД MySQL будет использоваться очень часто, поэтому выделим ее в отдельный РНР-файл config.php.

<?php
//Aдрес сервера MySQL
$dblocation="localhost";
//Имя базы данных на хостинге или локальной машине
$dbname="test";
//Имя пользователя базы данных
$dbuser="root";
//его пароль
$dbpasswd="";
//устанавливаем соединение с базой данных
$dbcnx=@mysql_connect($dblocation, $dbuser, $dbpasswd);
if(!$dbcnx) {
exit("<p>В настоящий момент сервер базы данных не доступен, поэтому корректное отбражение страницы невозможно</p>");
}
//выбираем базу данных
if(!@mysql_select_db($dbname, $dbcnx))
{
exit("<p>В настоящий момент база данных не доступна, поэтому корректное отбражение страницы невозможно </p>");
}
?>

Рассмотрим пример возвращающий версию MySQL-сервера. Файл config.php включается в скрипт при помощи конструкции require_once().

Для получения версии сервера MySQL используется информационная функция VERSION().

<?php
//Устанавливаем соединение с базой данных
require_once("config.php");
//Формируем и выполняем SQL-запрос
$query="SELECT VERSION()";
$ver=mysql_query($query);
//Проверяем правильность выполнения запроса
if(!$ver) exit("Ошибка выполнения запроса " .mysql_error());
//Получаем результат выполнения запроса
echo mysql_result($ver,0);
?>

Более полный список функций расширения РНР, предназначенного для работы с СУБД MySQL, представлена в таблице.