Урок 29: Обновление и удаление данных

Мы продолжаем наш курс по изучению PHP для начинающих. В предыдущих уроках мы разобрались, как создавать базы данных, добавлять и извлекать информацию. Сегодня мы переходим к важной теме, обновлению и удалению данных. Это ключевые операции в работе с базами данных, но они требуют аккуратности. Одно неверное действие может привести к потере информации.

Обновление записей (UPDATE)

Операция UPDATE позволяет изменять существующие данные в таблице. Она незаменима, когда нужно исправить ошибку, обновить статус пользователя или изменить любую другую информацию.

Синтаксис запроса UPDATE

Базовый синтаксис выглядит так:

UPDATE таблица 
SET столбец1 = значение1, столбец2 = значение2, ... 
WHERE условие;
  • таблица — имя таблицы, которую нужно обновить.
  • SET — указывает столбцы и новые значения.
  • WHERE — определяет, какие строки обновлять. Если пропустить WHERE, обновятся все строки в таблице!

Пример 1: Обновление одного поля

Допустим, у нас есть таблица users, и мы хотим изменить email пользователя с id = 5:

UPDATE users 
SET email = 'new_email@example.com' 
WHERE id = 5;

Пример 2: Обновление нескольких полей

Изменим имя и статус пользователя:

UPDATE users 
SET name = 'Алексей', status = 'active' 
WHERE id = 5;

Использование PHP для выполнения UPDATE

На практике мы будем выполнять запросы через PHP. Вот пример с использованием PDO:

<?php 
try {
    $pdo = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');
    $stmt = $pdo->prepare("UPDATE users SET email = :email WHERE id = :id");
    $stmt->execute([
        'email' => 'new_email@example.com',
        'id' => 5
    ]);
    echo "Данные обновлены!";
} catch (PDOException $e) {
    echo "Ошибка: " . $e->getMessage();
}
?>

А вот пример с mysqli:

<?php 
$mysqli = new mysqli("localhost", "username", "password", "test");
if ($mysqli->connect_error) {
    die("Ошибка подключения: " . $mysqli->connect_error);
}

$stmt = $mysqli->prepare("UPDATE users SET email = ? WHERE id = ?");
$stmt->bind_param("si", $email, $id);

$email = "new_email@example.com";
$id = 5;
$stmt->execute();

echo "Данные обновлены!";
$stmt->close();
$mysqli->close();
?>

Важно!

  • Всегда используйте подготовленные запросы (как в примерах выше), чтобы избежать SQL-инъекций.
  • Перед выполнением UPDATE проверяйте условие WHERE — убедитесь, что оно точно указывает на нужные строки.

Удаление записей (DELETE)

Операция DELETE удаляет строки из таблицы. Это необратимая операция, поэтому будьте предельно внимательны!

Синтаксис запроса DELETE

Базовый синтаксис:

DELETE FROM таблица 
WHERE условие;
  • Если не указать WHERE, удалятся все данные из таблицы!

Пример 1: Удаление одной записи

Удалим пользователя с id = 10:

DELETE FROM users 
WHERE id = 10;

Пример 2: Удаление по условию

Удалим всех неактивных пользователей:

DELETE FROM users 
WHERE status = 'inactive';

Использование PHP для выполнения DELETE

Пример с PDO:

<?php 
try {
    $pdo = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');
    $stmt = $pdo->prepare("DELETE FROM users WHERE id = :id");
    $stmt->execute(['id' => 10]);
    echo "Запись удалена!";
} catch (PDOException $e) {
    echo "Ошибка: " . $e->getMessage();
}
?>

Пример с mysqli:

<?php 
$mysqli = new mysqli("localhost", "username", "password", "test");
if ($mysqli->connect_error) {
    die("Ошибка подключения: " . $mysqli->connect_error);
}

$stmt = $mysqli->prepare("DELETE FROM users WHERE id = ?");
$stmt->bind_param("i", $id);

$id = 10;
$stmt->execute();

echo "Запись удалена!";
$stmt->close();
$mysqli->close();
?>

Советы по безопасности:

  1. Перед удалением сделайте резервную копию данных.
  2. Используйте транзакции для групповых операций.
  3. Всегда проверяйте права доступа к операции DELETE.

Практические задачи

Чтобы закрепить материал, выполните следующие задания.

Задача 1: Обновление данных

  1. Создайте таблицу products с полями idnamepricequantity.
  2. Добавьте 5 тестовых записей.
  3. Напишите скрипт на PHP, который увеличивает цену всех товаров на 10%.

Решение:

<?php 
// Подключение к базе данных (пример для PDO)
try {
    $pdo = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');
    $stmt = $pdo->prepare("UPDATE products SET price = price * 1.1");
    $stmt->execute();
    echo "Цены обновлены!";
} catch (PDOException $e) {
    echo "Ошибка: " . $e->getMessage();
}
?>

Задача 2: Удаление данных

  1. В таблице users добавьте поле last_login (тип DATETIME).
  2. Напишите скрипт, который удаляет пользователей, не заходивших в систему более года.

Решение:

<?php 
// Удаление неактивных пользователей (пример для mysqli)
$mysqli = new mysqli("localhost", "username", "password", "test");
if ($mysqli->connect_error) {
    die("Ошибка подключения: " . $mysqli->connect_error);
}

$query = "DELETE FROM users WHERE last_login < NOW() - INTERVAL 1 YEAR";
if ($mysqli->query($query) === TRUE) {
    echo "Неактивные пользователи удалены!";
} else {
    echo "Ошибка: " . $mysqli->error;
}

$mysqli->close();
?>

Частые ошибки

  1. Пропуск условия WHERE в UPDATE или DELETE.
    • Результат: Все данные обновлены или удалены.
    • Совет: Перед запуском запроса проверьте его в phpMyAdmin или другом клиенте.
  2. Неправильные типы данных.
    Например, передача строки вместо числа в WHERE id = '5'.

    • Совет: Используйте привязку параметров с указанием типа (bind_param("i", $id) в mysqli).
  3. Игнорирование транзакций при массовых операциях.
    • Совет: Если вы обновляете или удаляете много строк, используйте транзакции для отката в случае ошибки.

Чтобы продолжить обучение, переходите по ссылке: полный курс по PHP для начинающих.

Спасибо за внимание и до встречи в следующем уроке!