PHP 8ПровереноПрактика

Безопасный 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 — структурный источник, без внешней ссылки

Последняя содержательная проверка: . Автор-разработчик Михаил Каржин. Методика качества контента.

Данные этого сервиса

Настройки cookie и локальных данных

Аналитика

Текущий статус: не выбран. До согласия обе аналитические системы не загружаются.

Локальные данные

Удаление затрагивает только ключи PHP-сервиса в этом браузере и требует подтверждения.

Политики

Политика конфиденциальности · Политика использования файлов cookie