PHP: Vorteile von Bind-Variablen
Bind-Variablen sind im Umfeld von Oracle-Datenbanken sehr verbreitet. Man kann sie verwenden z.B. in SQL-Procedures und SQL-Statements. Doch mittlerweile unterstützen auch andere Datenbanksysteme diese Technik. Der Zugriff erfolgt beispielsweise über PHP, JAVA, VB oder JDBC bzw. ODBC.
Für die Verwendung von Bind-Variablen sprechen im Wesentlichen zwei Gründe:
- Man muss Parameter nicht speziell kodieren (escapen), um sie in einem SQL-Statements zu verwenden (z.B. Maskierung von Hochkommas).
- Man erreicht einen signifikanten Performancegewinn unter optimaler Ausnutzung der Cache-Mechanismen.
Beispiel ohne Bind-Variablen:
$stmt = oci_parse($conn, $strSQL)
oci_execute($stmt);
$strSQL = "SELECT vorname, nachname FROM kunden WHERE ort = 'Bonn'";
$stmt = oci_parse($conn, $strSQL)
oci_execute($stmt);
$strSQL = "SELECT vorname, nachname FROM kunden WHERE ort = 'Berlin'";
$stmt = oci_parse($conn, $strSQL)
oci_execute($stmt);
Vor der Ausführung wird jedes Statement im Datenbank-Cache gesucht und – falls nicht vorhanden- geparsed und danach ausgeführt. Nach der Ausführung belegen alle drei Statements Platz im Datenbank-Cache - für eine evtl. spätere nochmalige Ausführung.
Beispiel mit Bind-Variablen:
$arrOrt[0] ='Koblenz';
$arrOrt[1] ='Bonn';
$arrOrt[2] ='Berlin';
$strSQL = 'SELECT vorname, nachname FROM kunden WHERE ort=:ORT';
$stmt = oci_parse($conn, $strSQL)
for ($i=0;$i<sizeof($arrOrt);$i++) {
oci_bind_by_name($stmt, 'Ort', $arrOrt[$i]);
oci_execute($stmt);
}
?>
Hier wird nur das allgemeine Statement mit dem Platzhalter :ORT einmalig im Datenbank-Cache gesucht und - falls nicht vorhanden - geparsed. Danach wird es ohne nochmaliges Parsen mehrmals ausgeführt.
Diese Methodik ist wesentlich schneller und letztendlich werden durch die geringere Anzahl verschiedenartiger SQL-Statements im Cache auch die Ressourcen effizienter genutzt.
Fazit
- Verwenden Sie Bind-Variablen, wo immer es möglich ist.
- Wenn Sie sich für die objektorientierte Programmierung entscheiden, ist die Implementierung einer allgemeinen Datenbankzugriffsklasse zu empfehlen.