Параметры передаются отдельно от текста SQL: СУБД компилирует план с плейсхолдерами и подставляет значения как данные, а не как синтаксис запроса.
Разбор
- Конкатенация
'...'+userInput ломает эту границу.
- ORM обычно параметризует, но raw SQL /
ORDER BY ${col} остаются опасны.
- Whitelist для идентификаторов (имена колонок/таблиц) — отдельно.
- Права БД: даже при SQLi ущерб меньше с read-only ролью где возможно.
Пример
Итог
Параметризация — базовый контроль против SQLi; динамический SQL требует whitelist.