← Назад к вопросам

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

2.2 Middle🔥 122 комментариев
#PHP Core

Комментарии (2)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Запись данных в базу данных с помощью PHP

Для записи информации в базу данных через PHP используется несколько подходов, начиная от базовых функций и заканчивая современными ORM. Ниже представлю основные методы с примерами.

1. Подключение к базе данных

Перед любой операцией с БД необходимо установить соединение. Для MySQL/MariaDB чаще всего используется PDO (PHP Data Objects) или mysqli.

<?php
// Пример подключения через PDO
try {
    $host = 'localhost';
    $dbname = 'my_database';
    $username = 'root';
    $password = '';
    
    $pdo = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8", 
                   $username, $password);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    echo "Подключение успешно";
} catch(PDOException $e) {
    die("Ошибка подключения: " . $e->getMessage());
}
?>

2. Базовые методы записи данных

Использование PDO с подготовленными запросами

Подготовленные запросы критически важны для безопасности, они предотвращают SQL-инъекции.

<?php
// Данные для вставки
$name = "Иван Петров";
$email = "ivan@example.com";
$age = 30;

// SQL запрос с плейсхолдерами
$sql = "INSERT INTO users (name, email, age) VALUES (:name, :email, :age)";
$stmt = $pdo->prepare($sql);

// Привязка параметров
$stmt->bindParam(':name', $name);
$stmt->bindParam(':email', $email);
$stmt->bindParam(':age', $age);

// Выполнение запроса
if ($stmt->execute()) {
    echo "Запись успешно добавлена. ID новой записи: " . $pdo->lastInsertId();
} else {
    echo "Ошибка при добавлении записи";
}
?>

Альтернативный вариант с mysqli

<?php
$mysqli = new mysqli("localhost", "root", "", "my_database");

if ($mysqli->connect_error) {
    die("Ошибка подключения: " . $mysqli->connect_error);
}

$name = "Мария Сидорова";
$email = "maria@example.com";

// Подготовленный запрос mysqli
$stmt = $mysqli->prepare("INSERT INTO users (name, email) VALUES (?, ?)");
$stmt->bind_param("ss", $name, $email); // "ss" означает два string параметра

if ($stmt->execute()) {
    echo "Запись добавлена, ID: " . $stmt->insert_id;
} else {
    echo "Ошибка: " . $stmt->error;
}

$stmt->close();
$mysqli->close();
?>

3. Продвинутые техники

Пакетная вставка данных

Для вставки нескольких записей за один запрос:

<?php
$users = [
    ['Анна', 'anna@example.com', 25],
    ['Сергей', 'sergey@example.com', 32],
    ['Ольга', 'olga@example.com', 28]
];

$sql = "INSERT INTO users (name, email, age) VALUES ";
$values = [];
$params = [];

foreach ($users as $index => $user) {
    $placeholders = [];
    foreach ($user as $paramIndex => $value) {
        $paramName = ":param_{$index}_{$paramIndex}";
        $placeholders[] = $paramName;
        $params[$paramName] = $value;
    }
    $values[] = "(" . implode(', ', $placeholders) . ")";
}

$sql .= implode(', ', $values);
$stmt = $pdo->prepare($sql);

foreach ($params as $key => $value) {
    $stmt->bindValue($key, $value);
}

if ($stmt->execute()) {
    echo "Добавлено " . count($users) . " записей";
}
?>

4. Современные подходы с использованием ORM

Для сложных проектов часто используют ORM (Object-Relational Mapping), например Eloquent в Laravel:

<?php
// Пример с Eloquent (Laravel)
use App\Models\User;

// Создание одной записи
$user = User::create([
    'name' => 'Дмитрий Иванов',
    'email' => 'dmitry@example.com',
    'password' => bcrypt('secret')
]);

// Или через создание объекта
$user = new User();
$user->name = 'Екатерина Смирнова';
$user->email = 'ekaterina@example.com';
$user->save();

echo "Создан пользователь с ID: " . $user->id;
?>

5. Безопасность и лучшие практики

  1. Всегда используйте подготовленные запросы - это защищает от SQL-инъекций
  2. Валидируйте и санируйте данные перед записью в БД
  3. Используйте транзакции для согласованности данных:
<?php
try {
    $pdo->beginTransaction();
    
    // Несколько операций
    $pdo->exec("INSERT INTO orders (user_id, total) VALUES (1, 1000)");
    $pdo->exec("UPDATE users SET balance = balance - 1000 WHERE id = 1");
    
    $pdo->commit();
    echo "Транзакция успешно завершена";
} catch(Exception $e) {
    $pdo->rollBack();
    echo "Ошибка: " . $e->getMessage();
}
?>
  1. Логируйте ошибки, но не выводите их напрямую пользователю
  2. Используйте миграции для управления структурой БД

6. Полный рабочий пример

<?php
class DatabaseInserter {
    private $pdo;
    
    public function __construct($config) {
        $this->connect($config);
    }
    
    private function connect($config) {
        try {
            $dsn = "mysql:host={$config['host']};dbname={$config['dbname']};charset=utf8";
            $this->pdo = new PDO($dsn, $config['username'], $config['password']);
            $this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        } catch(PDOException $e) {
            throw new Exception("Database connection failed: " . $e->getMessage());
        }
    }
    
    public function insertUser($name, $email, $age = null) {
        $sql = "INSERT INTO users (name, email, age, created_at) 
                VALUES (:name, :email, :age, NOW())";
        
        $stmt = $this->pdo->prepare($sql);
        
        return $stmt->execute([
            ':name' => htmlspecialchars($name),
            ':email' => filter_var($email, FILTER_VALIDATE_EMAIL),
            ':age' => $age
        ]);
    }
}

// Использование
$config = [
    'host' => 'localhost',
    'dbname' => 'test_db',
    'username' => 'root',
    'password' => ''
];

$inserter = new DatabaseInserter($config);

if ($inserter->insertUser('Алексей', 'alexey@example.com', 30)) {
    echo "Пользователь успешно добавлен";
}
?>

Ключевые выводы: Для записи данных в PHP используйте PDO с подготовленными запросами для безопасности, обрабатывайте исключения, валидируйте входные данные. Для больших проектов рассмотрите использование ORM типа Eloquent или Doctrine, которые предоставляют более высокоуровневый API и дополнительные возможности.