W3docs

Введение в PHP и MySQL

PHP и MySQL — две наиболее популярные технологии для веб-разработки. Узнайте, как их связать, подключиться к базе данных и выполнять операции CRUD.

PHP и MySQL — две наиболее популярные технологии для веб-разработки, разработанные для совместной работы. PHP выполняется на сервере и генерирует HTML, который видят посетители; MySQL хранит данные, необходимые этим страницам — пользователей, записи, заказы, комментарии. Почти каждый динамический сайт (блог, форум, интернет-магазин) построен на этой паре или на чём-то очень похожем.

На этой странице объясняется, что делает каждая технология, два способа взаимодействия PHP с MySQL, а также полный рабочий пример: подключение, создание таблицы, вставка данных и их чтение. К концу вы будете знать, какие инструменты использовать и куда обращаться для каждой операции.

Что такое PHP?

PHP расшифровывается как PHP: Hypertext Preprocessor и является серверным языком сценариев. «Серверный» означает, что код выполняется на веб-сервере до того, как что-либо отправляется в браузер — посетитель никогда не видит PHP, только HTML, который он создаёт. Поскольку PHP может читать пользовательский ввод, взаимодействовать с базой данных и формировать разные страницы при каждом запросе, он используется для сайтов электронной коммерции, форумов, блогов и любых приложений, изменяющихся в зависимости от данных.

Что такое MySQL?

MySQL — это система управления реляционными базами данных (РСУБД). «Реляционный» означает, что данные хранятся в таблицах из строк и столбцов — таблица users, таблица products — и таблицы могут ссылаться друг на друга. PHP отправляет команды MySQL с помощью SQL (Structured Query Language) — стандартного языка для запросов к базе данных на хранение или возврат данных. MySQL надёжно хранит данные на диске между запросами, поэтому информация, введённая сегодня, будет там и на следующей неделе.

Зачем использовать PHP и MySQL вместе?

  • Бесплатно и с открытым исходным кодом. Обе технологии свободны для использования и распространения, поэтому вы можете создавать и размещать полноценные приложения без лицензионных расходов.
  • Масштабируемость. Этот же стек работает как на личном блоге, так и на высоконагруженном сайте — ресурсы добавляются по мере роста данных и трафика.
  • Простота обучения и хорошая документация. PHP имеет плавную кривую обучения, MySQL повсеместно распространён, а огромное сообщество означает, что большинство проблем, с которыми вы столкнётесь, уже решены онлайн.
  • Широкая поддержка. Почти каждый веб-хостинг предлагает PHP и MySQL из коробки, а крупные компании используют эту комбинацию в продакшене.

Два способа подключения: MySQLi и PDO

PHP поставляется с двумя современными расширениями для баз данных. Для проекта следует выбрать одно из них:

MySQLiPDO
Работает сТолько MySQL12+ баз данных (MySQL, PostgreSQL, SQLite…)
Стили APIПроцедурный и объектно-ориентированныйТолько объектно-ориентированный
Подготовленные запросыДаДа
Лучший выбор, когдаВы точно будете использовать только MySQLВы можете сменить базу данных в будущем

Избегайте старых функций mysql_*, которые встречаются в устаревших учебниках. Они были удалены в PHP 7 и небезопасны. Используйте MySQLi или PDO.

Оба расширения поддерживают подготовленные запросы — это важнейшая функция безопасности, защищающая от SQL-инъекций. Подробное объяснение см. в разделе Подготовленные запросы MySQL.

Подключение к базе данных MySQL

Для подключения необходимы четыре параметра: хост, имя пользователя, пароль и имя базы данных. В примере ниже используется процедурный стиль MySQLi с проверкой ошибок перед продолжением.

<?php
   $host     = 'localhost';
   $user     = 'username';
   $password = 'password';
   $dbname   = 'database_name';

   // Create connection
   $conn = mysqli_connect($host, $user, $password, $dbname);

   // Always check the connection before doing anything else
   if (!$conn) {
       die("Connection failed: " . mysqli_connect_error());
   }
   echo "Connected successfully";
?>

Объектно-ориентированный стиль MySQLi, полный пример с PDO и устранение неполадок подключения описаны в разделах Подключение PHP к MySQL и PHP MySQLi.

Типичный рабочий процесс

После подключения почти все операции с базой данных сводятся к четырём действиям, которые называют CRUD — Create (создание), Read (чтение), Update (обновление), Delete (удаление). Каждое соответствует SQL-оператору и описано в отдельной главе:

  1. Создать таблицу, чтобы определить место хранения данных — см. Создание таблицы MySQL.
  2. Вставить строки данных — см. Вставка данных в MySQL.
  3. Прочитать (выбрать) данные обратно — см. Выборка данных из MySQL.
  4. Обновить существующие строки — см. Обновление данных в MySQL.
  5. Удалить ненужные строки — см. Удаление данных в MySQL.

Обычно результаты ограничивают с помощью условия WHERE и сортируют с помощью ORDER BY.

Полный мини-пример

Этот скрипт подключается, создаёт таблицу users, если она не существует, вставляет одну строку, затем считывает всё обратно. Для вставки используется подготовленный запрос, чтобы пользовательские значения не могли нарушить запрос.

<?php
   $conn = mysqli_connect('localhost', 'username', 'password', 'database_name');
   if (!$conn) {
       die("Connection failed: " . mysqli_connect_error());
   }

   // 1. Create a table
   mysqli_query($conn, "
       CREATE TABLE IF NOT EXISTS users (
           id    INT AUTO_INCREMENT PRIMARY KEY,
           name  VARCHAR(50),
           email VARCHAR(100)
       )
   ");

   // 2. Insert a row safely with a prepared statement
   $stmt = mysqli_prepare($conn, "INSERT INTO users (name, email) VALUES (?, ?)");
   mysqli_stmt_bind_param($stmt, "ss", $name, $email);
   $name  = "Ada Lovelace";
   $email = "[email protected]";
   mysqli_stmt_execute($stmt);

   // 3. Read the data back
   $result = mysqli_query($conn, "SELECT id, name, email FROM users");
   while ($row = mysqli_fetch_assoc($result)) {
       echo $row['id'] . ": " . $row['name'] . " (" . $row['email'] . ")\n";
   }

   mysqli_close($conn);
?>

Аргумент "ss" сообщает MySQL, что оба привязанных значения являются строками. Поскольку значения привязываются отдельно от текста SQL, злоумышленник не сможет внедрить вредоносный SQL через поля name или email.

Распространённые ошибки

  • Отсутствие проверки подключения. Если учётные данные или хост неверны, каждый последующий вызов завершается молча. Всегда вызывайте die() или обрабатывайте ошибку сразу после подключения.
  • Построение запросов с конкатенацией строк. Прямое включение пользовательского ввода в строку SQL открывает путь для SQL-инъекций. Используйте вместо этого подготовленные запросы.
  • Вывод ошибок базы данных пользователям. В продакшене записывайте ошибки в лог, а не выводите mysqli_connect_error() на страницу — это может раскрыть детали сервера.

Заключение

PHP и MySQL позволяют создавать динамические, управляемые данными сайты с помощью бесплатных, хорошо поддерживаемых инструментов. Подключайтесь с помощью MySQLi или PDO, всегда используйте подготовленные запросы для пользовательского ввода и помните, что почти каждая задача с базой данных — это одна из четырёх операций CRUD. Далее используйте ссылки на рабочий процесс выше, чтобы подробно изучить каждую операцию.

Практика

Практика
Какую функциональность предоставляют функции PHP для работы с MySQL?
Какую функциональность предоставляют функции PHP для работы с MySQL?
Was this page helpful?