Både. Förberedda uttalanden kommer att skydda dig mot SQL-injektioner om, och endast om, du använder dem på ett korrekt sätt. Att bara använda förberedda satser hjälper inte om du till exempel fortfarande interpolerar variabler för tabell-/kolumnnamn.
$stmt = "SELECT * FROM $table WHERE $column = ?"; //not good...