PHP: работа с базой данных MySQL
База данных – это инструмент, который позволяет хранить и обрабатывать контент сайта, т.е. все медийные материалы, которые показываются пользователю в браузере. С помощью СУБД осуществляется выборка, добавление, удаление и изменение данных. Также с использованием базы данных с легкостью решаются такие задачи как поиск по сайту, разбиение на страницы, регистрация и авторизация пользователей. Именно поэтому в основные инструменты веб-разработчика включается СУБД.
MySQL - это популярная реляционная клиент-серверная СУБД, используемая в разных приложениях. Стандартным языком управления реляционных баз данных является SQL. SQL означает язык структурированных запросов (Structured Query Language), который MySQL использует для коммуникации с другими программами. Сверх того, MySQL имеет свои собственные расширенные функции SQL для того чтобы обеспечить пользователям дополнительный функционал.
Любая программа на языке PHP, которая собирается работать с MуSQL базой данных, должна состоять из следующих обязательных базовых шагов:
1. Установить связь с MySQL сервером.
2. Выбрать базу данных для работы.
3. Посылать команды MYSQL серверу и получать ответы.
4. Обработать результаты.
5. Закрыть связь с MySQL сервером.
Реализовать эти действия можно несколькими способами:
1. Используя стандартные классические функции обращения к БД MySQL.
2. Используя современные функции из расширения mysqli для версий начиная с PHP 5 и MySQL 4.1.
3. Используя классы и методы из расширения mysqli для версий начиная с PHP 5 и MySQL 4.1.
Рассмотрим на примерах как реализуется доступ к БД MySQL каждым из указанных способов.
Классический доступ к БД MySQL
<?php /* Переменные для соединения с базой данных */ $hostname = "localhost"; $username = "user"; $password = "password"; $dbName = "world"; /* создать соединение */ mysql_connect( $hostname, $username, $password) or die( "Не могу создать соединение "); /* выбрать базу данных. Если произойдет ошибка - вывести ее */ mysql_select_db($dbName) or die(mysql_error()); /* Выполнить запрос. Если произойдет ошибка - вывести ее. */ $result = mysql_query( 'SELECT Name, Area FROM Country ORDER BY Area DESC LIMIT 5') or die(mysql_error()); echo "Пять крупнейших стран мира: <br>"; /* Выборка результатов запроса */ while( $row = mysql_fetch_assoc($result) ){ echo $row['Name']." с площадью ". $row['Area']." км<sup>2</sup>.<br>"; } /* Освобождаем используемую память */ mysql_free_result($result); /* Закрываем соединение */ mysql_close(); ?>
Современное подключение к БД MySQL
Использование функций из расширения mysqli ускоряет большинство операций доступа к БД, иногда достигая 40-кратного увеличения производительности по сравнению с классическим методом. Также повышена безопасность работы с данными и добавлены новые функции.
<?php /* Подключение к серверу MySQL */ $link = mysqli_connect( 'localhost', /* Хост, к которому мы подключаемся */ 'user', /* Имя пользователя */ 'password', /* Используемый пароль */ 'world'); /* База данных для запросов по умолчанию */ if (!$link) { echo "Ошибка подключения к базе данных. Код ошибки: ".mysqli_connect_error(); exit; } /* Посылаем запрос серверу */ if ($result = mysqli_query($link, 'SELECT Name, Area FROM Country ORDER BY Area DESC LIMIT 5')) { echo "Пять крупнейших стран мира: <br>"; /* Выборка результатов запроса */ while( $row = mysqli_fetch_assoc($result) ){ echo $row['Name']." с площадью ". $row['Area']." км<sup>2</sup>.<br>"; } /* Освобождаем используемую память */ mysqli_free_result($result); } /* Закрываем соединение */ mysqli_close($link); ?>
Подключение к БД MySQL с использованием классов и методов
Объектно-ориентированный интерфейс предоставляет немного более лаконичный и менее восприимчивый к ошибкам способ подключения к базе данных.
<?php /* Подключение к серверу MySQL */ $mysqli = new mysqli('localhost', 'user', 'password', 'world'); if (mysqli_connect_errno()) { echo "Ошибка подключения к серверу MySQL. Код ошибки:".mysqli_connect_error(); exit; } /* Посылаем запрос серверу */ if ($result = $mysqli->query( 'SELECT Name, Area FROM Country ORDER BY Area DESC LIMIT 5')) { echo "Пять крупнейших стран мира: <br>"; /* Выбираем результаты запроса: */ while( $row = $result->fetch_assoc() ){ echo $row['Name']." с площадью ". $row['Area']." км<sup>2</sup>.<br>"; } /* Освобождаем память */ $result->close(); } /* Закрываем соединение */ $mysqli->close(); ?>
Использование шаблонов запросов при обращении к базе данных
Подготовленные выражения или шаблоны предоставляют разработчикам возможность создавать запросы, которые являются более безопасными, имеют более высокую производительность и более удобны в написании.
Процесс работы с шаблонами таков:
1. Подготовить для сервера MySQL шаблон запроса с параметрами.
2. Привязать переменные PHP к параметрам в заготовке запроса.
3. Дать команду серверу на выполнение запроса.
4. Запросить получение нового ряда данных в указанные переменные.
<?php /* Подключение к серверу MySQL */ $mysqli = new mysqli('localhost', 'user', 'password', 'world'); if (mysqli_connect_errno()) { echo "Ошибка подключения к серверу MySQL. Код ошибки:".mysqli_connect_error(); exit; } /* Подготовленное выражение */ if ($stmt = $mysqli->prepare("SELECT Name, Area FROM Country WHERE Area < ? LIMIT 5")) { $stmt->bind_param("i", $area); $area = 100000; $stmt->execute(); /* Объявление переменных для заготовленного выражения*/ $stmt->bind_result($col1, $col2); /* Выборка значений */ while ($stmt->fetch()) { echo $col1." с площадью ".$col2." км<sup>2</sup>.<br>"; } /* Закрытие выражения */ $stmt->close(); } /* Закрытие подключения */ $mysqli->close(); ?>