Tous les deux. Les instructions préparées vous protégeront contre les injections SQL si, et seulement si, vous les utilisez de manière correcte. Le simple fait d'utiliser des instructions préparées ne vous aidera pas si vous continuez à interpoler des variables pour les noms de table/colonne par exemple.
$stmt = "SELECT * FROM $table WHERE $column = ?"; //not good...