Вы когда-нибудь задумывались, как работает динамический сайт? Например, интернет-магазин помнит ваши корзины, а социальная сеть показывает ленту новостей. Секрет прост: PHP и MySQL работают в паре, как кофе и круассан. PHP — это язык, который оживляет страницы, а MySQL — база данных, где хранится вся информация. В этой статье я расскажу, как их подружить, даже если вы новичок. Без сложных терминов, только практика.

Что такое MySQL и зачем он нужен PHP?

MySQL — это система управления базами данных. Представьте себе огромную таблицу в Excel, только с миллионами строк. В ней хранятся имена пользователей, пароли, товары, заказы. PHP, в свою очередь, умеет читать и записывать данные в эту таблицу. Без базы данных любой сайт был бы статичным — как фотография, которую нельзя изменить. А с MySQL сайт становится живым: вы регистрируетесь, оставляете комментарии, добавляете товары в избранное.

Для работы с MySQL в PHP есть несколько способов. Самый современный и безопасный — расширение PDO (PHP Data Objects). Оно поддерживает разные базы данных, не только MySQL. Но для новичков я рекомендую начать с mysqli — это простое и мощное расширение. Оно работает только с MySQL, зато легко учится.

Первое подключение: как не запутаться

Чтобы PHP начал общаться с MySQL, нужно установить соединение. Это как позвонить другу: надо знать номер телефона, пароль и имя. В MySQL «номер телефона» — это хост (обычно localhost), «имя» — логин, а «пароль» — пароль. Ещё нужно указать имя базы данных, с которой работаете.

Вот простой пример подключения через mysqli:

<?php
$host = 'localhost';
$user = 'root';
$password = '';
$database = 'my_shop';

$mysqli = new mysqli($host, $user, $password, $database);

if ($mysqli->connect_error) {
    die('Ошибка подключения: ' . $mysqli->connect_error);
}
echo 'Соединение установлено успешно!';
?>

Что здесь происходит? Мы создаём объект mysqli и передаём ему параметры. Если что-то пошло не так, скрипт остановится с сообщением об ошибке. Всегда проверяйте подключение — это правило хорошего тона. Никогда не предполагайте, что база данных доступна.

Правило: Всегда закрывайте соединение с базой данных после работы. Это освобождает ресурсы сервера. В mysqli это делается так: $mysqli->close();.

Как выполнять запросы: SELECT, INSERT, UPDATE

После подключения можно отправлять SQL-запросы. SQL — это язык, на котором база данных понимает, что вы хотите: найти, добавить, изменить или удалить данные. В PHP это делается через метод query().

Пример простого SELECT-запроса, который выводит список товаров:

<?php
$result = $mysqli->query('SELECT id, name, price FROM products');

if ($result->num_rows > 0) {
    while ($row = $result->fetch_assoc()) {
        echo 'Товар: ' . $row['name'] . ', цена: ' . $row['price'] . '<br>';
    }
} else {
    echo 'Товаров нет';
}
$result->free();
?>

Разберём по шагам. query() выполняет SQL и возвращает объект результата. num_rows показывает, сколько строк найдено. fetch_assoc() забирает одну строку в виде ассоциативного массива, где ключи — названия столбцов. Цикл while перебирает все строки. После работы с результатом его нужно освободить методом free().

Для INSERT запроса всё похоже, только результат — true или false:

<?php
$sql = "INSERT INTO products (name, price) VALUES ('Ноутбук', 50000)";
if ($mysqli->query($sql) === true) {
    echo 'Товар добавлен, ID: ' . $mysqli->insert_id;
} else {
    echo 'Ошибка: ' . $mysqli->error;
}
?>

Обратите внимание на insert_id — он возвращает ID только что добавленной записи. Это удобно, если нужно сразу получить ссылку на новый объект.

Безопасность: как не попасть под SQL-инъекцию

Самая частая ошибка новичков — подставлять данные пользователя прямо в SQL-запрос. Например, если вы пишете: "SELECT * FROM users WHERE login = '" . $_POST['login'] . "'", злоумышленник может ввести ' OR '1'='1 и получить доступ к чужим данным. Это называется SQL-инъекция.

Чтобы защититься, используйте подготовленные выражения (prepared statements). Они отделяют код SQL от данных. Вот как это работает с mysqli:

<?php
$stmt = $mysqli->prepare('SELECT * FROM users WHERE login = ? AND password = ?');
$stmt->bind_param('ss', $login, $password);
$login = $_POST['login'];
$password = $_POST['password'];
$stmt->execute();
$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
    echo 'Привет, ' . $row['name'];
}
$stmt->close();
?>

Вопросы в запросе — это плейсхолдеры. bind_param() связывает их с переменными. Первый аргумент — типы данных: 's' для строки, 'i' для целого числа. Это безопасно, потому что данные экранируются автоматически.

Лайфхак: Всегда используйте подготовленные выражения для любых данных, которые приходят от пользователя (POST, GET, COOKIE). Даже если кажется, что данные безопасны, привычка защитит вас в будущем.

Типичные ошибки и как их исправить

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

ОшибкаПричинаРешение
Connection refusedMySQL сервер не запущенПроверьте, работает ли служба MySQL (например, через XAMPP или командную строку)
Access denied for userНеверный логин или парольПроверьте учётные данные в коде. В локальной среде часто root без пароля
Table doesn't existНеправильное имя таблицыПроверьте регистр букв. В Linux имена таблиц чувствительны к регистру
Syntax errorОшибка в SQL-запросеВыведите запрос через echo и выполните его в phpMyAdmin для отладки

Ещё одна частая проблема — кодировка. Если вместо русских букв вы видите кракозябры, добавьте после подключения: $mysqli->set_charset('utf8');. Это заставит MySQL общаться с PHP в кодировке UTF-8.

Правило: Никогда не выводите пользователю технические сообщения об ошибках. Вместо die($mysqli->error) логируйте ошибку в файл, а пользователю показывайте общее сообщение вроде «Что-то пошло не так».

Заключение: что в итоге

Интеграция PHP с MySQL — это база, без которой не обойтись при создании динамических сайтов. Мы разобрали, как подключиться к базе, выполнять запросы, защищаться от атак и исправлять ошибки. Главные выводы:

  • Используйте mysqli или PDO для работы с MySQL.
  • Всегда проверяйте подключение и закрывайте его.
  • Применяйте подготовленные выражения для безопасности.
  • Не выводите ошибки пользователю — логируйте их.

Теперь вы можете написать простой скрипт, который добавляет пользователей или выводит список товаров. Попробуйте сами: создайте базу, таблицу и напишите код. Ошибки неизбежны, но каждая ошибка — это шаг к мастерству.

Студия WNDER