urlencode()
no tiene nada que hacer con SQL, por lo que hace tanto para evitar la inyección de SQL como lo hace el queroseno para hacer que sus hamburguesas sean más deliciosas. Además, todo lo que ingrese a su base de datos terminará codificado en URL, que luego deberá decodificar si desea hacer algo útil con ellos después de recuperar la base de datos.
Escapar de sus consultas, por otro lado, ayuda a su aplicación a protegerse contra la inyección de SQL y nada más. No modifica los datos entras en tus consultas; solo protege tus consultas de ser manipulado. Esa es la idea de la inyección de SQL, y también es la razón por la cual la codificación de URL de sus datos no hace nada para protegerlos. Concedido, lo hace convierte tus apóstrofes '
en %27
, haciéndolos inofensivos, pero como se menciona en el párrafo anterior, tendrá que decodificarlos como URL de nuevo en apóstrofes para poder usarlos.
Use la herramienta correcta para el propósito correcto. Especialmente en el año 2011, debería usar declaraciones preparadas en lugar de escapar manualmente sus variables de consulta y concatenar cadenas para formar consultas.