Beide Varianten müssen gewährleisten, dass Nutzdaten nicht versehentlich als Steuerdaten interpretiert werden.
Mir scheint, dass du dich hier irrst. Bei der verlinkten Variante werden beim Execute Variablennamen angegeben. Wie die Werte in die Variablen kommen ist nicht das Problem der Prepared Statements.
Sobald die Variablen aber mit Programmdaten gefüllt werden müssen, gibt es einen Schritt da findet ein Kontextwechsel statt.
Ich sehe da weder ex- noch implizites Maskieren.
Mir scheint es so, als setzt du Kontextwechsel gleich mit der Notwendigkeit Daten maskieren zu müssen. Maskierung ist doch nur eine Möglichkeit einen Kontextwechsel zu behandeln, Längenangaben sind eine weitere.