Безопасный PDO-запрос: от входных данных до результата
Значения передаются отдельно от SQL; изменяемые имена полей выбираются только из заранее разрешённого списка.
$stmt = $pdo->prepare('SELECT id, name FROM users WHERE email = :email');Контракт входа
До запроса определите, какие поля обязательны, как нормализуется email и что означает отсутствие строки. Prepared statement не заменяет валидацию предметных данных.
Подготовка и выполнение
<?php
$stmt = $pdo->prepare(
'SELECT id, name FROM users WHERE email = :email'
);
$stmt->execute(['email' => $email]);
$user = $stmt->fetch();Динамическая сортировка
Placeholder нельзя использовать вместо имени столбца. Сопоставьте пользовательский вариант с allowlist и добавьте только выбранный доверенный идентификатор.
Результат и ошибки
Пустой fetch() обрабатывайте отдельно от ошибки БД. PDOException журналируйте без пароля, полного DSN и пользовательских секретов; наружу возвращайте нейтральное сообщение.
Проверка
Тестируйте корректный email, отсутствие записи, кавычки во входе, неподдерживаемую сортировку и недоступное соединение. SQL-инъекция должна оставаться обычным значением параметра.
Связанные материалы
Источники и проверка
- PHP Documentation Group — структурный источник, без внешней ссылки
Последняя содержательная проверка: . Автор-разработчик Михаил Каржин. Методика качества контента.