Bei der Erstellung eines einfachen Tabellenbetrachters mit Perl werden Programmierer in der Lage sein zu verstehen, wie man sich mit MySQL-Datenbanken verbindet und Abfragen ausführt, um Daten aus Tabellen zu extrahieren.

Die Grundvoraussetzung für den Code wird sein, einen Tabellenbetrachter mit Perl zu erstellen. Die Programmierer lernen, wie man eine Verbindung mit einer Datenbank herstellt, sowie die Vorbereitung und Ausführung von MySQL-Abfragen. Dieses Tutorial geht davon aus, dass die Programmierer bereits eine Datenbank mit mehreren Tabellen eingerichtet haben.

Der folgende Code wurde von Don Colton, Professor an der Brigham Young University – Hawaii, erstellt und wird mit seiner Zustimmung verwendet. Der vollständige Code ist auf seiner Website zu finden.

Beginn des Skripts

Das Skript beginnt mit:

#!/usr/bin/perl -Tw

Dieser erste Abschnitt teilt dem Server mit, wo er die ausführbare Perl-Datei finden soll, das -Tw ist eine Kombination aus -T und -w. -T aktiviert die Taint-Prüfung, die die Ausführung von unsicherem Code verhindert. -w schaltet Warnungen ein, wodurch der Code leichter zu debuggen ist.

DBI verwenden;

DBI’ steht für Database Interface, es ist eine Perl-Bibliothek, die es dem Code erlaubt, sich mit verschiedenen Datenbanken zu verbinden und mit ihnen zu interagieren.

chomp ( $in = <STDIN> ); # cgi input lesen$in =
“&$in&”; # & sentinels hinzufügen

Chomp entfernt Zeilenumbrüche in der Eingabe, die aus dem unten stehenden Formular stammt. Das Hinzufügen von Sentinels ist auch eine gute Praxis bei der Suche nach Schlüsselwörtern.

Verbinden mit der Datenbank

DBI zum Verbinden verwenden:

# ersetzen Sie DDD, HHH, usw. mit Ihren Angaben$st
= DBI->connect ( “DBI:mysql:DDD:HHH”, “UUU”, “PPP” );

Die Variable $st stellt eine Verbindung zur angegebenen Datenbank her, wenn eine Abfrage ausgeführt werden muss. DDD steht für den Datenbanknamen, HHH für den Host, UUU für den Benutzernamen und PPP für das Passwort.

print “Content-type: text/html\n<html><head><title>Table
Viewer</title></head><body><h1>Table Viewer</h1>
Bitte wählen Sie eine Tabelle zur Ansicht aus. <form method=post>\n
“;

Obwohl das Programm in Perl geschrieben ist, wird die Ausgabe vom Server auf einer Webseite angezeigt. Daher werden die grundlegende HTML-Shell und die Überschrift vor dem Formular ausgegeben.

tableButtons();

Dieser Code ruft das Unterprogramm ‘tableButtons()’ unten auf. Das Unterprogramm zeigt für jede Tabelle in der Datenbank eine Schaltfläche an. Wenn eine Tabelle ausgewählt wird, wird der Inhalt der Tabelle angezeigt.

Verarbeitung von Perl-Eingaben

Zum Parsen der Eingabe:

# wenn Tabelle angegeben ist, ihren Inhalt auflistenif
( $in =~ /&table=([^&]+)&/ ) {

Die Variable $in enthält die Benutzereingabe. ‘=~’ vergleicht $in mit der Zeichenkette /&table=([^&]+)&/. Die Zeichenkette beginnt mit ‘/&’ und endet mit ‘&/’, was die zuvor deklarierten Sentinels sind. ‘table=’ bezieht sich auf den Namen der Eingabeschaltfläche. Wenn das Formular verarbeitet wird, heißt jede Schaltfläche table, aber ihr Wert ist der Name der tatsächlichen Tabelle.

Der Wert der Tabelle wird mit ‘([^&]+)’ verglichen. ‘[^&]’ bezieht sich auf ein beliebiges Zeichen, während das ‘+’ für ein oder mehrere Zeichen steht. Der Code sucht also nach jeder Eingabe, bei der der Tabellenname ein oder mehrere Zeichen enthält. Wenn er gefunden wird, wird der Wert von ‘([^&]+)’ in der Variablen $1 gespeichert, die nachfolgenden Variablen werden in $2, $3 usw. gespeichert.

tableRows($1); }

Das Unterprogramm tableRows() wird unten deklariert, der Funktionsaufruf oben übergibt die Variable $1, die den Tabellennamen enthält. Das Unterprogramm tableRows() zeigt den Inhalt dieser Tabelle an.

Schließen der Datenbankverbindung

Zum Beenden der Haupt-Shell:

# Ende der Verarbeitungprint
“</body></html>\n”; $st->disconnect
();

Um die Seite zu beenden, beenden wir die html-Shell und trennen die Verbindung zur Datenbank.

Verbinden mit Datenbanken mit Perl: Tutorial zum Erstellen eines einfachen Tabellenbetrachters
Verbinden mit Datenbanken mit Perl: Tutorial zum Erstellen eines einfachen Tabellenbetrachters

Vorbereiten, Ausführen und Beenden der Abfrage

Die erste Subroutine beginnt:

sub tableButtons {$q1 = $st->prepare ( “show tables” );

Nach dem Aufruf der Subroutine bereitet die Variable $q1 die MySQL-Abfrage vor, die an die Datenbank übergeben wird, in diesem Fall werden die Namen aller Tabellen in der Datenbank angezeigt und für jede eine Schaltfläche erstellt.

$q1->execute();

Nachdem eine Abfrage in Perl vorbereitet wurde, muss sie anschließend ausgeführt werden.

while ( @z = $q1->fetchrow_array() ) {

Für jeden Tabellennamen führt die Abfrage ein ‘fetchrow_array()’ aus, das die Tabellendetails in dem Array ‘@z’ speichert. Solange es noch Tabellennamen zu verarbeiten gibt, wird die while-Schleife weiter ausgeführt.

print “<input type=submit”;
print ” name=table value=’$z[0]’>\n”; }

Eine Schaltfläche wird jedes Mal erstellt, wenn die Abfrage einen Tabellennamen aus der Datenbank abruft. Jede Schaltfläche hat den gleichen Namen, aber einen anderen Wert. Der Wert wird aus dem Array entnommen, in dem die Details der Tabelle gespeichert sind, ‘$z[0]’ ist die erste Zelle im Array und enthält den Namen der Tabelle. Wenn die Schaltfläche angeklickt wird, wird dieser Wert zur Verarbeitung an die Eingabe übergeben.

$q1->Ende();}

Sobald die Abfrage abgeschlossen ist, wird die Funktion finish() ausgeführt.

Anzeige des Tabelleninhalts

Die zweite Subroutine beginnt:

sub tableRows {my
( $table ) = @_; # lokale Variable

Das Unterprogramm ‘tableRows()’ wird aufgerufen, wenn eine Schaltfläche angeklickt wird und nimmt den Namen der Tabelle auf. Der Name der Tabelle wird dann in der lokalen Variable ‘$table’ gespeichert. Diese Unterroutine zeigt den Inhalt der Tabelle an.

print “<h1>Inhalt der Tabelle $table</h1><table
border=1>\n”; $query = “select *
from $table”;

Nach der Deklaration der Tabelle, deren Inhalt angezeigt werden soll, wird die Tabelle erstellt und die Abfrage eingerichtet. Die Abfrage wird etwas anders eingerichtet als bei der vorherigen Abfragedeklaration. Ob die Abfrage in einer Variablen gespeichert oder direkt an die Prepare-Funktion übergeben wird, hat keinen Einfluss auf das Ergebnis des Programms; es ist jedoch sinnvoll, die Abfrage in einer Variablen zu speichern, wenn das Programm mehr als einmal ausgeführt werden soll. Diese spezielle Abfrage wählt jede Zelle aus der ausgewählten Tabelle aus.

$q2 = $st->prepare ( $query ); $q2->execute
(); while
( @z = $q2->fetchrow_array() ) {

Wie oben beschrieben, wird die Abfrage dann vorbereitet, ausgeführt und die Werte der einzelnen Zeilen in einem Array gespeichert.

print “<tr>”; foreach
$cell ( @z ) {

Für jede Zeile in der Tabelle, die aus der Datenbank abgerufen wird, wird eine neue Zeile erstellt. Dann wird für jede Zelle in der in ‘@z’ gespeicherten Zeile die folgende Schleife ausgeführt.

print “<td>$cell” }print
“\n”; }

Für jede Zelle in der Tabelle wird eine neue Zelle erstellt, wobei der Inhalt der Zelle aus der Datenbank an das Array @z übergeben und dann in der Variablen $cell gespeichert wird. End-Tags für <td> und <tr> können ebenfalls einfach hinzugefügt werden, um den Code standardkonform zu machen.

$q2->finish();
print “</table>\n”; }

Wiederum ist die Abfrage beendet, die Tabelle geschlossen und das letzte Unterprogramm ist fertig.