Creo que primero debes tener claros los conceptos de XSS y SQL Injection, porque el convertir las entidades no tiene que ver con SQL Injection pero si con XSS o incluso CSRF.
Igualmente hay dos conceptos que hay que saber manejar: escapar y filtrar.
Escapar caracteres es lo que hacen lo bindings, es lo que hace addslashes(), etc. El resultado es el mismo contenido pero modificado de tal manera que no ocasione problemas al interpretarse.
Por lo tanto el filtrado conserva una parte de los datos intactos mientras que elimina lo que no es permitido o seguro. De cualquier forma el contenido filtrado también debe ser escapado siempre.
El HTML mal formado o malicioso no hace daño mientras esté en la base de datos, cuando trasciende al navegador sin ser filtrado es cuando arruina la cosa.
El SQL mal formado o maleado suele afectar solamente al servidor de base de datos.
En definitiva debes escapar siempre, pero no el HTML!!
Es un error pensar que htmlentities() y similares afectan al SQL pues eso arruina el formato y así hay mas proceso entre escapar y des-escapar las entidades.
Siempre hay que escapar nuestra consultas, no siempre las entidades.