Хотя многие источники цитируют функцию htmlspecialchars с ENT_QUOTES недостаточно для предотвращения SQL-инъекции, ни одна из них не дает доказательства концепции.  Я не могу думать ни о какой возможности. 
Рассмотрим следующий пример:
 $username = htmlspecialchars($_GET['name'], ENT_QUOTES, 'UTF-8'); $sql = "SELECT * from user WHERE name='$username'"; mysql_query($sql,...); 
Может ли кто-нибудь представить пример, кроме тех, которые рассматриваются в случае, когда SQL-инъекция проходит вокруг mysql_real_escape_string () ?
  Символ, который htmlspecialchars не может кодировать критический символ \0 (NUL byte), \b (backspace), а также символ \ . 
Чтобы воспользоваться этим, вам понадобится инструкция с несколькими точками ввода. С помощью этого вы можете избежать закрывающего разделителя одного строкового литерала и, таким образом, расширить его до следующего начального разделителя следующего строкового литерала. Три строковых литерала, каждая с точкой впрыска, затем могут быть преобразованы в две строковые литералы.
Например:
 SELECT * from user WHERE (name='$login' OR email='$login') AND password='$password' 
Теперь со следующими значениями:
 login: ) OR 1=1 /*\ password: */-- 
В результате оператор выглядит следующим образом:
 SELECT * from user WHERE (name=') OR 1=1 /*\' OR email=') OR 1=1 /*\') AND password='*/--' 
Это эквивалентно:
 SELECT * from user WHERE (name=') OR 1=1 /*\' OR email=') OR 1=1 
Строки – это не единственное, с чем взаимодействует SQL.
 $result = "SELECT * FROM user WHERE id = " . htmlspecialchars($_GET['id']); 
Здесь параметризованные запросы очень удобны.