TGViewer
PHP Portal | Программирование PHP Portal | Программирование @phpgx · 4.64K subscribers
Post #183 2.75K
Параметризованные запросы в PHP для безопасной работы с базами данных

Что такое параметризованные запросы? Параметризованные запросы позволяют разделить код SQL-запроса и данные, которые передаются в базу. Это обеспечивает защиту от SQL-инъекций, так как данные, введенные пользователем, обрабатываются как текст, а не как часть SQL-кода.

1️⃣ Как это работает? Параметризованные запросы используют подготовленные выражения (prepared statements). Они выполняются в два этапа:

1. Запрос отправляется в базу данных для компиляции.
2. Переменные передаются и вставляются в компилированный запрос.

2️⃣ Пример использования с MySQLi

<?php
// Подключение к базе данных
$mysqli = new mysqli("localhost", "username", "password", "database");

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

// Подготовка запроса
$stmt = $mysqli->prepare("SELECT * FROM users WHERE email = ?");
if (!$stmt) {
die("Ошибка подготовки запроса: " . $mysqli->error);
}

// Привязка параметров (здесь 's' обозначает строковый тип данных)
$email = "test@example.com";
$stmt->bind_param("s", $email);

// Выполнение запроса
$stmt->execute();

// Получение результата
$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
echo "User: " . $row["name"] . " - Email: " . $row["email"] . "<br>";
}

// Закрытие запроса и соединения
$stmt->close();
$mysqli->close();
?>


3️⃣ Пример использования с PDO

<?php
try {
// Подключение к базе данных
$pdo = new PDO("mysql:host=localhost;dbname=database", "username", "password");
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

// Подготовка запроса
$stmt = $pdo->prepare("SELECT * FROM users WHERE email = :email");

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

// Передача значения переменной
$email = "test@example.com";

// Выполнение запроса
$stmt->execute();

// Получение результата
$users = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach ($users as $user) {
echo "User: " . $user["name"] . " - Email: " . $user["email"] . "<br>";
}
} catch (PDOException $e) {
echo "Ошибка: " . $e->getMessage();
}
?>


4️⃣ Преимущества параметризованных запросов

🔹Безопасность: защита от SQL-инъекций.
🔹Эффективность: запрос компилируется только один раз, независимо от количества выполняемых операций.
🔹Читаемость и структура: разделение SQL-кода и переменных делает код более понятным.

👉 @PHPgx | #заметки
  • 👍 10
  • ❤ 1
  • 🔥 1
More from @phpgx
  1. Sep 21, 2026Совет по Laravel Все исходящие HTTP-ответы можно обрабатывать в одном месте с помощью Http…
  2. Sep 11, 2026Laravel tip Нужно получить все записи, кроме последних 5? skip() сам по себе игнорируется,…
  3. Sep 7, 2026В Laravel 13.30 появился удобный метод для Collection Использовали chunkWhile(), чтобы про…
  4. Sep 7, 2026PHP-совет В числовых литералах можно использовать подчёркивания, чтобы визуально группиров…
  5. Sep 2, 2026Он не из наших 👉 @PHPgx
  6. Aug 26, 2026TypePHP вышел в open source раньше запланированного 🎉 Изначально релиз исходников был нам…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →