[Inhalt] -> [DBI] |
[info] |
||
prepare/execute
do
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;'
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/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;
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;
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.