Ce sont les requêtes préparées qui permettent d'éviter les injections (sous réserve de les utiliser correctement), pas PDO en lui-même, qui permet, heureusement de faire aussi des requêtes non-préparées (= échappements à faire soi-même via PDO::quote). Elles (les requêtes préparées) ne sont pas aussi propres à PDO, elles existent dans d'autres extensions à commencer par mysqli puisque c'est le SGBD (partie cliente) qui les implémente (PHP ne fait qu'interfacer les API clientes via ses extensions).
intval aussi n'a rien à voir, et j'aimerais bien savoir comment tu peux avoir une injection avec ?!?
Enfin, on peut toujours utiliser les fonctions mysql_* qui ne sont que dépréciées pour l'heure, de toute façon si ton appli utilise ces fonctions, tu n'as pas le choix : c'est migrer (mysqli ou PDO) ou échapper ce qui doit l'être avec mysql_real_escape_string. Mais ce n'est pas parce que tu passes à mysqli ou pdo que tu règles le problème non plus.
intval aussi n'a rien à voir, et j'aimerais bien savoir comment tu peux avoir une injection avec ?!?
Enfin, on peut toujours utiliser les fonctions mysql_* qui ne sont que dépréciées pour l'heure, de toute façon si ton appli utilise ces fonctions, tu n'as pas le choix : c'est migrer (mysqli ou PDO) ou échapper ce qui doit l'être avec mysql_real_escape_string. Mais ce n'est pas parce que tu passes à mysqli ou pdo que tu règles le problème non plus.