Ein Prepared Statement ist eine sogenannte vorbereitete Anweisung für ein Datenbanksystem. Im Gegensatz zu gewöhnlichen Statements enthält es noch keine Parameterwerte. Stattdessen werden dem Datenbanksystem Platzhalter übergeben.
Mittels Prepared Statements können SQL-Injections effektiv verhindert werden, da das Datenbanksystem die Gültigkeit von Parametern prüft, bevor diese verarbeitet werden.
Soll ein Statement mit unterschiedlichen Parametern mehrere Male (z. B. innerhalb einer Schleife) auf dem Datenbanksystem ausgeführt werden, können Prepared Statements einen Geschwindigkeitsvorteil bringen, da das Statement schon vorübersetzt im Datenbanksystem vorliegt und nur noch mit den neuen Parametern ausgeführt werden muss.
Beispiel eines Prepared Statement in Java:
// Statement wird erzeugt
PreparedStatement ps = connection.prepareStatement(
"SELECT user, password FROM tbl_user WHERE user = ?"
);
// Parameter werden übergeben
ps.setString(1, username);
// Statement wird ausgeführt.
ResultSet rs = ps.executeQuery();
Beispiel eines Prepared Statement in PHP mit PHP Data Objects[1]:
<?php
$stmt = $dbh->prepare('SELECT user, password FROM tbl_user WHERE user = :user');
$stmt->bindParam(':user', $user);
// eine Zeile abfragen
$user = 'Alice';
$stmt->execute();
// eine weitere Zeile mit anderen Werten abfragen
$user = 'Bob';
$stmt->execute();
?>