Параметризованные запросы в PHP для безопасной работы с базами данных
Что такое параметризованные запросы? Параметризованные запросы позволяют разделить код SQL-запроса и данные, которые передаются в базу. Это обеспечивает защиту от SQL-инъекций, так как данные, введенные пользователем, обрабатываются как текст, а не как часть SQL-кода.
1️⃣ Как это работает? Параметризованные запросы используют подготовленные выражения (prepared statements). Они выполняются в два этапа:
1. Запрос отправляется в базу данных для компиляции.
2. Переменные передаются и вставляются в компилированный запрос.
2️⃣ Пример использования с MySQLi
3️⃣ Пример использования с PDO
4️⃣ Преимущества параметризованных запросов
🔹 Безопасность: защита от SQL-инъекций.
🔹 Эффективность: запрос компилируется только один раз, независимо от количества выполняемых операций.
🔹 Читаемость и структура: разделение SQL-кода и переменных делает код более понятным.
👉 @PHPgx | #заметки
Что такое параметризованные запросы? Параметризованные запросы позволяют разделить код SQL-запроса и данные, которые передаются в базу. Это обеспечивает защиту от SQL-инъекций, так как данные, введенные пользователем, обрабатываются как текст, а не как часть SQL-кода.
1. Запрос отправляется в базу данных для компиляции.
2. Переменные передаются и вставляются в компилированный запрос.
<?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 = "[email protected]";
$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();
?>
<?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 = "[email protected]";
// Выполнение запроса
$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();
}
?>