zeitform Internet Dienste      

[Inhalt] -> [DBI]

[info]


           

DBI: Datenbank-Interaktionen


Vorhandene Treiber ermitteln

DBI kommuniziert mit verschiedenen Datenbanken über datenbank-spezifische DBD-Treiber. Um zu ermitteln, welche Treiber installiert sind, ruft man die Methode available_drivers auf:

   shell> perl -M DBI -e 'print join "\n", DBI->available_drivers;'

Seitenanfang


Datenbank-Verbindung herstellen und beenden

Das Perl-Modul DBI bietet alle Funktionen zur Interaktion mit Datenbanken. Die Verbindung wird über die Methode connect hergestellt und über disconnect wieder getrennt:

   #!/usr/bin/perl -w
   use strict;
   use DBI;

   my $dsn = "DBI:mysql:database=db_name;host=localhost"; # mySQL
   my $db_user  = undef; # oder ein Benutzername
   my $db_pass  = undef; # oder ein Passwort

   # Verbindung herstellen
   my $dbh = DBI->connect($dsn, $db_user, $db_pass) or
        die "Fehlermeldung...";

   # Verbindung trennen (beim Beenden des Programmes)
   END { $dbh->disconnect; } 

Seitenanfang


Datenbank-Verbindungen protokollieren

Alle Datenbank-Interaktionen können mit der Methode trace rotokolliert werden, sinnvolle Werte für $level sind 1 und 2:

   $dbh->trace($level);            # nach STDERR oder
   $dbh->trace($level, $filename); # nach $filename

Seitenanfang


Datenbank abfragen über prepare/execute

Die Datenbank kann über das Methoden-Gespann prepare() und execute() abgefragt werden. prepare() wird ein SQL-Statement übergeben, wobei Platzhalter (?) verwendet werden können. execute() führt dieses Statement mit den übergebenen Werten aus. Die verschiedenen fetchrow_-Methoden liefern zeilenweise die Ergebniswerte zurück.

   my $statement = "SELECT * FROM table WHERE xxx = ?"; # ? = Platzhalter fuer execute()
   my $sth = $dbh->prepare($statement) or die $dbh->errstr;
   $sth->execute($value)               or die $dbh->errstr;

   while (my $result = $sth->fetchrow_hashref) {

     # verarbeite die Daten mittels $result->{column_name}

   }

   $sth->finish;

Seitenanfang


Datenbank abfragen über do

Die Datenbank kann (v.a. bei non-select-Anfragen) über die Methode do() angesprochen werden. do() wird ein SQL-Statement übergeben, wobei Platzhalter (?) verwendet werden können.

   $dbh->do("CREATE TABLE table ( foo INT, bar VARCHAR(10) )")
                or die $dbh->errstr;

   $dbh->do("DELETE FROM table WHERE foo = ?", undef, $value) 
                or die $dbh->errstr;

Seitenanfang


Datenbank-Prüfung auf vorhandene Einträge

Manchmal ist es nötig, zu überprüfen, ob ein bestimmter Datensatz in einer Tabelle vorhanden ist. Das folgende Segment erledigt dies zuverläsig:

   my $statement = "SELECT * FROM table WHERE xxx = ?"; # ? = Platzhalter fuer execute()
   my $sth = $dbh->prepare($statement) or die $dbh->errstr;
   $sth->execute($value)               or die $dbh->errstr;
   my $ok = $sth->fetch;    # wenn Eintraege vorhanden sind, kommt einer zurueck
   $sth->finish;
   
   if ($ok) {

     # der Eintrag ist vorhanden

   }

Seitenanfang



Zusammengestellt von Alex Pleiner
© 2001-2003 zeitform Internet Dienste   Bei Problemen wenden Sie sich bitte an den Webmaster
Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1.