![]() |
[Inhalt] -> [DBI] |
[info] |
|
prepare/executedoDBI 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;'
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; }
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
prepare/executeDie 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;
doDie 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;
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
}
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.