Sie befinden sich hier:
» 
» 
17.10.2010

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:

 $strSQL = "SELECT vorname, nachname FROM kunden WHERE ort = 'Koblenz'";
 $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:

<?PHP
 $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.

Autor: Mein Name ist Harry Kämpf und ich bin seit vielen Jahren als Projekt Manager im Webumfeld tätig. Auf diesen Erfahrungen basieren die Tipps zur Webseitengestaltung. Ich schreibe gern über Webthemen, nehme aktuelle Trends auf und gebe bei Bedarf kompetente Beratung. Mehr Infos können Sie auf ueber-mich.html nachlesen.

1