Введение в 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 поставляется с двумя современными расширениями для баз данных. Для проекта следует выбрать одно из них:
| MySQLi | PDO | |
|---|---|---|
| Работает с | Только MySQL | 12+ баз данных (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-оператору и описано в отдельной главе:
- Создать таблицу, чтобы определить место хранения данных — см. Создание таблицы MySQL.
- Вставить строки данных — см. Вставка данных в MySQL.
- Прочитать (выбрать) данные обратно — см. Выборка данных из MySQL.
- Обновить существующие строки — см. Обновление данных в MySQL.
- Удалить ненужные строки — см. Удаление данных в 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. Далее используйте ссылки на рабочий процесс выше, чтобы подробно изучить каждую операцию.