Мой сайт — моя визитная карточка

Подключение к серверу управления базами данных

Я пока что не планирую даже думать о работах, связанных с серверами управления базами данных, отличных от MySQL (MS SQL, Oracle и другие). Я сейчас не вижу в этом смысла. подавляющее большинство задач, предъявдяемых сегодня к веб-сайтам, решаются сегодня средствами MySQL. Здесь я говорить о самой СУБД MySQL не стану. Поговорим о том, как подключаться к ней средствами PHP.

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

/**
 * Для того, чтобы подключиться к серверу управления базами данных,
 * нужно знать адрес сервера, имя пользователя, обладающими правами 
 * на чтение, запись и управление таблицами, его пароль. Запишем 
 * эти значения в переменные. Реальные значения могут отличаться
 * от приведенных ниже
 */
$db_host = 'localhost';					// сервер
$db_user = 'mysql_user';				// пользователь
$db_password = 'mysql_user_password';	// пароль

// Сразу же определим и имя базы, к которой мы будем подключаться
$db_name = 'mysql_db';

/**
 * Для подключения к базе данных используется стандартная функция PHP
 * Результат подключения будет помещен в переменную
 */
$conn = mysql_connect($db_host, $db_user, $db_password);

/**
 * После успешного подключения к серверу мы сможем выбрать базу данных,
 * с которой будем работать. Для этого мы также используем стандартную
 * функцию. И результат работы этой функции мы также запишем в переменную
 */
$query = mysql_select_db($db_name, $conn);

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

В 19 строке приведенного выше кода функция mysql_connect() принимает три необязательных (именно необязательных) параметра: имя сервера, имя пользователя, пароль пользователя. Без этих значений подключение к серверу произойдет, но с параметрами по умолчанию [?] сервер localhost:3306, в качестве имени пользователя будет использовано имя владельца процесса, а пароль будет пустым. Результат подключения мы присвоили переменной $conn. И вот для чего… Функция mysql_select_db() принимает два параметра: обязательный и необязательный. Обязательным параметром передается имя базы данных, необязательным — указатель соединения с сервером. В нашем случае это $conn. Но в большинстве случаев вы в своих скриптах будете использовать подключение лишь к одному серверу. Поэтому данный параметр можно опустить. Если необязательный параметр опущен, функция mysql_select_db() использует последнее открытое соединение. Если данное соединение не существует, функция mysql_connect() попытается создать его подобно функции mysql_connect().

Учитывая это, последнюю строку приведенного выше кода можно записать следующим образом:

$query = mysql_select_db($db_name);

Однако, используя этот код, вы никогда не узнаете было ли соединение успешным или оно было неудачным. Необходимо использовать средства оповещения об ошибках. Мы слегка изменим написанный выше код, используя инструменты сообщения об ошибках. Для этого мы используем стандартную функцию PHP die(). Она прерывает выполнение сценария, и принимает один необязательный параметр, который и представит пользователю в виде сообщения об ошибке. В качестве сообщения об ошибке мы можем вывести строку, полученную от функции mysql_error(). Если ошибка связана именно с сервером MySQL (подключение к серверу, выбор базы данных, запрос), эта функция скажет нам в чем именно ошибка. Или же мы можем просто передать функции die() строку со своим сообщением об ошибке.

/**
 * Для того, чтобы подключиться к серверу управления базами данных,
 * нужно знать адрес сервера, имя пользователя, обладающими правами 
 * на чтение, запись и управление таблицами, его пароль. Запишем 
 * эти значения в переменные. Реальные значения могут отличаться
 * от приведенных ниже
 */
$db_host = 'localhost';					// сервер
$db_user = 'mysql_user';				// пользователь
$db_password = 'mysql_user_password';	// пароль

// Сразу же определим и имя базы, к которой мы будем подключаться
$db_name = 'mysql_db';

/**
 * Для подключения к базе данных используется стандартная функция PHP
 * Результат подключения будет помещен в переменную
 * Если подключение будет неудачным, работа скрипта прервется, на экран
 * будет выведено сообщение об ошибке при обращении к MySQL
 */
$conn = mysql_connect($db_host, $db_user, $db_password) or die(mysql_error());

/**
 * После успешного подключения к серверу мы сможем выбрать базу данных,
 * с которой будем работать. Для этого мы также используем стандартную
 * функцию. И результат работы этой функции мы также запишем в переменную.
 * В случае неудачного обращения к серверу, или отсутствия указанной базы
 * данных, работа скрипта будет прервана, будет выведено сообщение об ошибке
 */
$query = mysql_select_db($db_name) or die("Не удалось подключиться к указанной базе данных");

Функция mysql_error() выводит сообщения об ошибке не всегда понятные разработчику. А указание своего собственного сообщения об ошибке не дает представления в каком именно месте произшел сбой. Можно объединить эти два способа, используя конкатенацию строк. В PHP конкатенация строк происходит с помощью использования оператора ..

$query = mysql_select_db($db_name) or die("<p>Не удалось подключиться к указанной базе данных: " . mysql_error() . ". Ошибка произошла в строке " . __LINE__ . "</p>");

Если бы неверно указали имя базы данных, то получили бы вот такое сообщение об ошибке:Не удалось подключиться к указанной базе данных: Unknown database 'mysql_db'. Ошибка произошла в строке 31. Согласитесь, такое сообщение об ошибке гораздо понятнее, чем:Не удалось подключиться к указанной базе данных, илиUnknown database 'mysql_db'[?]на самом деле, последнее сейчас не так уж очевидно, так как сказано, что база данных неизвестна. Но это только с базой данных или подключением к серверу. А если у вас такая ошибка будет в обычном запросе к базе данных, попробуйте угадать о чем идет речь, если сообщение об ошибке возникнет в вашем сценарии на тысячу строк с десятками запросов к БД, и будет таким:You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AND id=' at line 1.

Иногда после подключения к серверу и выбора базы данных, после выполнения запросов к базе (для извелечения информации, к примеру), информация предстаёт в виде иероглифов или нечитаемых символов. Значит у вас возникла проблема с кодировками. И скорее всего, вам нужны данные в кодировке UTF-8, а из базы они к вам пришли в кодировке Windows-1251. Бывает и иначе. Но чаще именно так происходит. Если вы не имеете возможности без вреда изменить кодировку данных, хранимых в БД, можно поступить проще — сообщите серверу MySQL в какой кодировке вы хотели бы получать данные от него. Для этого мы используем стандартную функцию PHPmysql_query(). Эта функция принимает два параметра: строку запроса к базе и указатель соединения с сервером (который можно опускать). Эта же функция потом будет вами использоваться для всех остальных запросов к БД.

/**
 * Данные, которые мы получаем после обращений к СУБД, 
 * нечитабельны, похожи на иероглифы. Укажем серверу MySQL
 * в какой кодировке мы хотели бы получать от него данные
 */
$query = mysql_query("set names utf8") or die("<p>Не удалось установить кодировку для получаемых данных: " . mysql_error() . ". Ошибка произошла в строке " . __LINE__ . "</p>");

Учтите, названия кодировок в MySQL не совсем привычные для вас. К примеру, Windows-1251 в MySQLпредставлена какcp1251. Вместо utf8 вы можете указать любую требуемую вам кодировку. Далее в своем сценарии вы можете обращаться к базе данных. А в конце его не забудьте закрыть соединение с помощью функцииmysql_close(). Если этой функции не передан аргумент (которым является указатель соединения с сервером), она закроет все существующие соединения. Если соединение не закрыть, сценарий закроет его самостоятельно. Считается, что лучше закрывать соединение принудительно. А вы решайте сами.

Я разместил эту статью: 26.07.2013
Количество просмотров: 3484
Яндекс.Метрика