urlencode()
n'a rien à faire avec SQL, il fait donc autant pour empêcher l'injection SQL que le kérosène pour rendre vos hamburgers plus délicieux. De plus, tout ce qui entre dans votre base de données finira par être codé en URL, que vous devrez ensuite décoder si vous souhaitez en faire quelque chose d'utile après avoir récupéré la base de données.
Échapper à vos requêtes, d'autre part, aide votre application à se prémunir contre l'injection SQL, et rien de plus. Il ne modifie pas les données vous entrez dans vos requêtes ; il ne fait que protéger vos requêtes d'être altéré. C'est l'idée de l'injection SQL, et c'est aussi pourquoi l'encodage URL de vos données ne fait rien pour s'en protéger. Certes, il fait tournez vos apostrophes '
dans %27
, les rendant inoffensifs, mais comme mentionné dans le paragraphe ci-dessus, vous devrez les décoder par URL en apostrophes afin de les utiliser.
Utilisez le bon outil pour le bon usage. Surtout en 2011, vous devriez utiliser des instructions préparées au lieu d'échapper manuellement vos variables de requête et de concaténer des chaînes pour former des requêtes.