Разработка сайтов, создание сайтов
главная / MySQL / Использование MySQL в PHP сценариях

Использование MySQL в PHP сценариях

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

Перед тем как мы получим возможность работать с информацией, хранимой в базе данных, необходимо установить соединение с сервером баз данных. Для этого предназначены 2 функции PHP, почти ничем не отличающиеся по результатам действия: mysql_pconnect() и mysql_connect(). Единственное отличие этих функций заключается в том, что первая из них устанавливает постоянное соединение с сервером баз данных, которое остается открытым даже после того, как ваш сценарий будет выполнен, и его невозможно будет закрыть даже функцией mysql_close(). Когда в вашем PHP-сценарии запускается функция mysql_pconnect(), она предварительно проверит, нет ли открытого ранее постоянного соединения, и если оно есть, то открывать новое она уже не будет. Подобный подход экономит время и снимает нагрузку с сервера баз данных. Тогда для чего может понадобиться вторая функция?

Дело в том, что количество соединений с сервером баз данных, которое может существовать одновременно, ограничено, и устанавливается в конфигурации MySQL параметром max_connectors. Также количество соединений ограничено и параметром конфигурации сервера Apache MaxClients, причем необходимо следить за соответствием этих параметров, чтобы у каждого процесса Apache при необходимости было свое соединение с MySQL. С этой точки зрения вам может понадобиться в каких-либо случаях открыть соединение с базой данных, извлечь необходимые данные, а после этого освободить соединение для других процессов веб-сервера.

Первым делом необходимо установить соединение с сервером баз данных

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


<?
$db = "my_base"; //Имя базы данных
$user = "root"; //Пользователь сервера баз данных
$pass = ""; //Пароль
$server = "localhost"; //Имя сервера
//Создание соединения
$link = mysql_connect($server, $user, $pass);
if(!$link) die("Не могу соединиться с MySQL");
mysql_select_db($db) or die("Не могу открыть $db: ".mysql_error());
?>


Выделите соединение с сервером и выбор базы в отдельный модуль

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

После успешного соединения с сервером база данных ему можно передавать SQL-запросы с помощью команды mysql_query(). При выполнении некоторых запросов - например, UPDATE или INSERT - может понадобиться только передать информацию серверу, но в большинстве случаев необходимо также получить результаты, которые вернул запрос:


<?
$query = "SELECT * FROM countries";
$result = mysql_query($query, $link) or die(mysql_error());
?>


Не забывайте выводить информацию об ошибках

Обратите внимание, что запрос хранится в строковой переменной, и при занесении и извлечении данных может возникнуть проблема вложенных кавычек, которую можно решить использованием одинарных кавычек в запросе, или при необходимости экранированием обычных кавычек: ". Кавычки также могут встретиться и неявно, когда в SQL-запрос передается информация из других строковых переменных PHP. В подобных случаях следует использовать функцию PHP AddSlashes(), позволяющую экранировать кавычки в символьных данных, и StripSlashes(), позволяющую убрать экранирующие символы в данных, извлеченных из базы. Помимо этого, следует рассмотреть случай, когда данные в базу будут вводиться непроверенным пользователем, а сразу после извлечения из базы - использоваться для генерации html-страницы, например, гостевой книги, и исключить в этом случае потенциальную опасность использования пользователем тегов и команд javascript, преобразовав хранимые данные с помощью функции PHP htmlspecialchars().

После того как мы получили информацию от сервера баз данных и сохранили ее в переменной $result, перед нами встает задача извлечь из этой переменной информацию. Например, с помощью функции mysql_num_rows() можно узнать количество строк в итоговой выборке, полученной по запросу:


<?
$num_of_rows = mysql_num_row($result);
?>


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


<?
while($data = mysql_fetch_row($result))
{
echo $data[0];
//обработка данных строки
}
?>


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

Особняком стоят случаи, когда мы не извлекаем, а вносим изменения в хранимую в базе данных информацию. В таких случаях очень часто может понадобиться узнать, в какое количество строк внес изменения наш SQL-запрос при выполнении таких команд, как INSERT, DELETE, UPDATE. В этом случае вместо функции mysql_num_row() нужно использовать функцию mysql_affected_rows(), которая и вернет необходимую информацию.

Обрабатывайте предварительно информацию пред занесением в БД

Большинство SQL-запросов выполняется с помощью функции mysql_query(), но, как уже упоминалось выше, для выбора базы данных используется отдельная функция. Отдельные функции также существуют как для создания новой базы данных, так и для удаления уже существующей:


<?
//Создание базы данных
mysql_create_db("new", $link);
//Удаление базы данных
mysql_drop_db("new", $link);
?>


Для отсоединения от сервера баз данных существует функция mysql_close(), но, как правило, в ее использовании нет необходимости. Если было установлено постоянное соединение, то команда на закрытие его будет проигнорирована, а в случае использования функции mysql_connect() соединение будет разорвано по окончании работы PHP-сценария.



Источник: rznhost.com
текущее:

НОВОСТИ

2011 г., «VisMech.ru»