На 27 уроке мы погрузимся в одну из ключевых тем PHP, это работу с базами данных. Почти каждое веб-приложение так или иначе взаимодействует с данными, сохраняет пользователей, обрабатывает заказы, хранит контент. И для этого важно уметь «общаться» с базами данных. В этом уроке я научу вас подключаться к MySQL, выполнять запросы и выбирать между PDO и mysqli.
Базы данных (БД) это «хранилища» информации. Например, когда вы регистрируетесь на сайте, ваш логин и пароль сохраняются в БД. PHP предоставляет два основных способа работы с MySQL: mysqli и PDO (PHP Data Objects). Оба инструмента решают одну задачу, взаимодействие с БД, но подходы у них разные. Давайте разбираться.
mysqli (MySQL Improved) расширение PHP, созданное специально для работы с MySQL.
Оно поддерживает как процедурный, так и объектно-ориентированный стиль программирования.
Для подключения понадобятся:
localhost).Пример подключения (объектно-ориентированный стиль):
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "my_database";
// Создаем соединение
$conn = new mysqli($servername, $username, $password, $dbname);
// Проверяем подключение
if ($conn->connect_error) {
die("Ошибка подключения: " . $conn->connect_error);
}
echo "Успешное подключение!";
?>
Что здесь происходит?
mysqli, передавая параметры подключения.connect_error).Предположим, у нас есть таблица users:
CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50), email VARCHAR(100) );
$sql = "INSERT INTO users (name, email) VALUES ('Максим', 'max@example.com')"; if ($conn->query($sql) === TRUE) { echo "Данные добавлены!"; } else { echo "Ошибка: " . $conn->error; }
$sql = "SELECT * FROM users"; $result = $conn->query($sql); if ($result->num_rows > 0) { while ($row = $result->fetch_assoc()) { echo "ID: " . $row["id"] . ", Имя: " . $row["name"]; } } else { echo "Нет данных."; }
Всегда закрывайте соединение после работы:
$conn->close();
PDO более универсальное расширение. Оно работает не только с MySQL, но и с другими СУБД (PostgreSQL, SQLite). PDO использует подготовленные запросы, что повышает безопасность.
Пример:
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "my_database";
try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "Успешное подключение!";
} catch (PDOException $e) {
echo "Ошибка подключения: " . $e->getMessage();
}
?>
Пояснение:
try...catch ловит исключения (ошибки).setAttribute() настраивает режим ошибок.$name = "Максим"; $email = "max@example.com"; $sql = "INSERT INTO users (name, email) VALUES (:name, :email)"; $stmt = $conn->prepare($sql); // Привязываем параметры $stmt->bindParam(':name', $name); $stmt->bindParam(':email', $email); if ($stmt->execute()) { echo "Данные добавлены!"; } else { echo "Ошибка."; }
$sql = "SELECT * FROM users"; $stmt = $conn->query($sql); $result = $stmt->fetchAll(PDO::FETCH_ASSOC); if (count($result) > 0) { foreach ($result as $row) { echo "ID: " . $row["id"] . ", Имя: " . $row["name"]; } } else { echo "Нет данных."; }
Почему подготовленные запросы безопаснее?
Они отделяют данные от SQL-кода, предотвращая инъекции.
Напишите скрипт, который создает таблицу products с полями:
id (INT, первичный ключ),title (VARCHAR(100)),price (DECIMAL(10,2)).Подсказка: Используйте SQL-запрос CREATE TABLE.
С помощью mysqli или PDO добавьте в таблицу users нового пользователя.
Пример данных:
Напишите скрипт, который выводит все товары из таблицы products.
Сегодня вы научились подключаться к MySQL через mysqli и PDO, выполнять запросы и защищаться от SQL-инъекций. Обязательно практикуйтесь, напишите собственные скрипты для вставки, обновления и удаления данных.
Если хотите глубже изучить PHP, посмотрите полный курс с уроками для начинающих.