Queries mit PDO ausführen

Höhere Sicherheit dank "prepared statements"

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".

Der Dreisprung: prepare - bind - execute

Im Prinzip braucht es drei Schritte für das Absetzen einer Query mit den PDO-Methoden:

  1. Die Query vorbereiten mit prepare(). Im Query-String wird mit Platzhaltern für die Werte gearbeitet (Die Platzhalter sind mit Doppelpunkten markiert, s. Code)
  2. Die Parameter dazu "anbinden" mit bindParam(): Es wird wird beschrieben, mit welchen Werten die Platzhalter ersetzt werden sollen.
  3. Die Query ausführen mit execute().

via GIPHY


Andere Geschmacksform: die Fragezeichen

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.

Ohne Platzhalter?

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.