Tach!
Ich fasse Kontextwechsel allgemeiner auf, nämlich: … wenn Daten in anderen Code eingefügt werden müssen. Wenn Programmdaten in einer MySQL-Datenbank gespeichert werden sollen, müssen die Daten irgendwann ja in gültige MySQL-Querys verpackt werden.
Genau das passiert bei (echten) Prepared Statements nicht. Das würde dem Sinn von "prepared" entgegenlaufen, wenn das Statement nicht vorbereitet bleiben könnte, sondern immer wieder nebst den darin einzufügenden Daten neu geparst werden müsste. Nicht-String-Daten wie Zahlen müssten dabei immer erst als Literal ausformuliert werden, nur um dann wieder zurückgeparst zu werden.
Das kann per Hand durch den Programmierer geschehen oder eben automatisch z.B. durch den mysqli-Treiber. Automatischer Kontextwechsel bedeutet für den Programmierer also kein Kontextwechsel, um den er sich kümmern müsste. Man könnte auch von impliziten und expliziten Kontextwechseln sprechen, das macht es noch deutlicher.
Das kann man, wenn Prepared Statements nur simuliert werden, weil die Datenbank oder die Abstraktionsschicht sie nicht direkt unterstützt. Die MySQL(i)-API simuliert nicht, inwieweit (/seit wann) PDO das nativ macht, entzieht sich meiner Kenntnis.
dedlfix.