Это правда, что параметры запроса SQL являются хорошей защитой от внедрения SQL. Встроенные кавычки или другие специальные символы не могут причинить вреда.
Но некоторые компоненты SQL-запросов не могут быть параметризованы. Например. имена таблиц, имена столбцов, ключевые слова SQL.
$sql = "SELECT * FROM MyTable ORDER BY {$columnname} {$ASC_or_DESC}";
Итак, есть несколько примеров динамического контента, который вам может потребоваться проверить перед интерполяцией в SQL-запрос. Значения белого списка также являются хорошим методом.
Также у вас могут быть значения, которые разрешены типом данных столбца, но будут бессмысленными. В этих случаях часто проще использовать код приложения для проверки, чем пытаться проверять ограничения SQL.
Предположим, вы храните номер кредитной карты. Существуют допустимые шаблоны номеров кредитных карт, и библиотеки могут распознавать действительные номера из недействительных.
Или как насчет того, когда пользователь определяет свой пароль? Возможно, вы захотите обеспечить достаточную надежность пароля или подтвердить, что пользователь ввел одну и ту же строку в два поля ввода пароля.
Или, если они заказывают количество товара, вам может потребоваться сохранить количество в виде целого числа, но вы хотите убедиться, что оно больше нуля и, возможно, если оно больше 1000, вы хотите удвоить -проверьте с пользователем, что они правильно ввели.