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(); 
 
?>

Направление: