Экранирование , чтобы избежать внедрения SQL и фильтрация или проверка входных данных - это две разные вещи. Вам не нужно фильтровать ввод, чтобы избежать внедрения SQL, и фильтрация ввода не обязательно помогает против внедрения SQL.
Чтобы избежать внедрения SQL, вы избегаете ввода, чтобы он не испортил синтаксис вашего запроса, или используете подготовленные операторы, которые полностью устраняют проблему. Не имеет значения, что содержит этот вход, отфильтрован он или нет. Если вы однажды избежали его, используя соответствующую функцию экранирования для вашей базы данных, или использовали подготовленные операторы, вы перестали беспокоиться о внедрении SQL.
Вы фильтруете или проверяете ввод по разным причинам, в основном потому, что вы не хотите разрешать определенные значения в базе данных. Это полностью отделено от того, как эти значения помещаются в базу данных (где может происходить внедрение SQL).
При output вам также нужно экранировать значения в соответствии с вашим выходным носителем, по тем же причинам, по которым вы экранируете их при помещении их в SQL-запрос: чтобы избежать путаницы в синтаксисе, который может быть использован , То есть при выводе на веб-страницу вы избегаете значений HTML. Опять же, не имеет значения, какая это ценность; если он правильно экранирован, это может быть что угодно.