Zugriff auf SQL-Datenbanken mit Perl

Gelesen bei AboutWebDesign.de
URL: http://www.aboutwebdesign.de/awd/content/973120476.shtml

Wer Perl professionell programmieren will, kommt auf die Dauer nicht um SQL herum. Deswegen gibt es das DBI-Modul, das Ihnen die Sache enorm erleichtert.

Einbindung

Zunächst einmal muss das DBI-Modul eingebunden werden:

use DBI;

Verbindung zur Datenbank herstellen

Um eine Datenbank zu verwenden, muss sie zunächst einmal konnektiert werden:

my $dbname=" ";
my $username=" ";
my $pw=" ";

my $data1 = "DBI:mysql:$dbname";
my $data2 = DBI->connect($data1, $username, $pw, { RaiseError => 1 }) || die("Kann DB nicht öffnen!");


Logischerweise müssen $dbname, $username und $pw mit sinnvollen Werten gefüllt werden. Mit $data2 haben Sie nun eine Art "Handle" auf die Datenbank eingerichtet.

Abfrage durchführen

Eine Abfrage funktioniert nach diesem Muster: Sie definieren eine SQL-Anweisung, die der Datenbank übergeben wird. Dann prüfen Sie, was die Datenbank als Ergebnis zurückliefert.

my $sql="SHOW TABLES"; # SQL-Befehl

my $abfr1=$data2->prepare($sql);
$abfr1->execute;

while (@ergf = $abfr1->fetchrow_array)
{
    # Hier: Ergebnisse verarbeiten. Den Wert des ersten Daten-
    # feldes des aktuellen Datensatzes finden Sie unter
    # $ergf[0], den des zweiten unter $ergf[1], den des dritten
    # unter $ergf[2] usw.
}

$abfr1->finish;


Dort, wo die Kommentarzeilen stehen, müssen Sie also etwas mit den Ergebnissen machen. Jeder Durchlauf der while-Schleife holt sich einen neuen Datensatz und schreibt die Werte der Datenfelder der Reihe nach in @ergf.

Anfrage durchführen

Anfragen brauchen Sie, wenn Sie z.B. etwas in die Datenbank schreiben wollen. Das Muster ähnelt dabei sehr dem der Anfrage:

my $sql="DROP TABLE Test"; # SQL-Befehl

eval {
    my $anfr=$data2->prepare($sql);
    $anfr->execute;
};

if ($@)
{
    die "Fehler: $@!";
}


Was wurde hier gemacht? Wir haben den Teil, in dem auf Gültigkeit des SQL-Befehls geprüft wird, in ein eval-Konstrukt verpackt. Dadurch werden Fehler abgefangen. Gleichzeitig wäre es aber leichtsinnig, Ihr Programm trotz eines möglichen Fehlers nicht zu unterbrechen. Daher die Prüfung der Variable $@, die nur einen Wert enthält, wenn die vorherige Anweisung einen Fehler zurücklieferte.

Datenbank schließen

Nicht vergessen werden sollte das Schließen der Datenbank am Ende Ihres Programms:

$data2->disconnect;