Prepared statements machen Datenbank-Abfragen sicherer. Die Query wird aufgetrennt in eine Rohform (oder Schablone) mit Platzhaltern und die Parameter, die zur Abfrage gehören. Die Parameter werden vorerst überprüft, ob sie unerlaubte Dinge enthalten und erst darauf weiter verarbeitet bzw. der Abfrage an Stelle der Platzhalter hinzugefügt. Man könnte das mit einer Art "Quarantäne"-Zustand vergleichen.
Diese Beschreibung ist natürlich eine grobe Vereinfachung, erleichtert aber das Verständnis für das Grundprinzip von "prepared statements".
Im Prinzip braucht es drei Schritte für das Absetzen einer Query mit den PDO-Methoden:
prepare(). Im Query-String wird mit Platzhaltern für die Werte gearbeitet (Die Platzhalter sind mit Doppelpunkten markiert, s. Code)bindParam(): Es wird wird beschrieben, mit welchen Werten die Platzhalter ersetzt werden sollen.execute().Für den Einsatz von Platzhalter gibt es auch eine Kurzversion. Statt den benannten Parameter ("named parameters") werden im folgenden Code anonyme Parameter ("question mark parameters" oder "unnamed parameters") verwendet. Die Werte werden als Array an execute() übergeben. Die Reihenfolge der Werte im Array muss dabei natürlich stimmen.
Diese Möglichkeit gibt es übrigens auch im Befehlssatz von mysqli.
Theoretisch kann man die Query auch ohne Platzhalter notieren. Damit wäre aber der grösste PDO-Trumpf punkto Sicherheit verspielt worden. Verwende diese Option also nur, wenn du den Query-String komplett ohne "Fremdeingaben" formulieren kannst.