Как с помощью PHP-скрипта записать информацию в базу данных?

«Как с помощью PHP-скрипта записать информацию в базу данных?» — вопрос из категории PHP Core, который задают на 24% собеседований PHP Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Для безопасной и эффективной записи в PHP я всегда использую PDO (PHP Data Objects). Это универсальный интерфейс, поддерживающий множество СУБД (MySQL, PostgreSQL, SQLite) и предоставляющий защиту от SQL-инъекций через подготовленные выражения (prepared statements).

Базовый пример записи с PDO:

// Конфигурация подключения
$host = 'localhost';
$dbname = 'my_app';
$username = 'app_user';
$password = 'secure_password';

// Создание подключения с обработкой ошибок через исключения
try {
    $pdo = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8mb4", $username, $password);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);

    // Данные для вставки
    $userName = 'Алексей';
    $userEmail = 'alex@example.com';

    // 1. Подготовленный запрос с именованными плейсхолдерами
    $sql = "INSERT INTO users (name, email, created_at) VALUES (:name, :email, NOW())";
    $stmt = $pdo->prepare($sql);

    // 2. Привязка значений к плейсхолдерам (это и есть защита от инъекций)
    $stmt->bindParam(':name', $userName, PDO::PARAM_STR);
    $stmt->bindParam(':email', $userEmail, PDO::PARAM_STR);

    // 3. Выполнение
    $stmt->execute();

    // Получить ID последней вставленной записи (если есть AUTO_INCREMENT)
    $newUserId = $pdo->lastInsertId();
    echo "Запись успешно добавлена, ID: $newUserId";

} catch (PDOException $e) {
    // В продакшене логируем исключение, пользователю показываем общее сообщение
    error_log("Database error: " . $e->getMessage());
    echo "Произошла ошибка при сохранении данных.";
}

Ключевые практики, которые я соблюдаю:

  • Всегда используйте подготовленные выражения. Никогда не подставляйте переменные напрямую в строку запроса.
  • Устанавливайте корректную кодировку (utf8mb4) для поддержки всех символов, включая эмодзи.
  • Включайте режим исключений (ERRMODE_EXCEPTION) для централизованной обработки ошибок.
  • Используйте транзакции для группировки нескольких операций записи в одну атомарную операцию.
  • В современных фреймворках (Laravel, Symfony) эту работу берут на себя ORM (Eloquent, Doctrine), но под капотом они используют те же принципы.