IT-Academy Logo
Sign Up Login Help
Home - Programmieren - Perl - DBD mysql



DBD mysql

Der Zugriff mit der Programmiersprache Perl auf Mysql-Datenbanken wird erklärt.


Autor: Franz Schaefer (mond)
Datum: 08-03-2002, 20:15:35
Referenzen: perldoc CGI
perldoc DBD::mysql
perldoc DBI
Schwierigkeit: Anfänger
Ansichten: 4929x
Rating: Bisher keine Bewertung.

Hinweis:

Für den hier dargestellte Inhalt ist nicht der Betreiber der Plattform, sondern der jeweilige Autor verantwortlich.
Falls Sie Missbrauch vermuten, bitten wir Sie, uns unter missbrauch@it-academy.cc zu kontaktieren.

[Druckansicht] [Als E-Mail senden] [Kommentar verfassen]



Übersicht

jetzt kennen wir einwenig perl und auch mysql. was liegt naeher als die
beiden zu verbinden? haendisches absetzten von INSERT sql befehlen am
mysql prompt ist ohnehin eine sehr muehsame art seine datebanken zu
verwalten.

zum zugriff auf mysql von perl aus gibt es wieder ein perl modul. d.h.
eigentlich 2 module. das DBI modul stellt ein abstraktes datenbank
interface dar, das DBD::mysql macht dann die konkrete anbindung an die
mysql datenbank. will man sein script z.b. von mysql auf die postgres
datenbank umstellen so braucht man im besten falle nur eine zeile zu
aendern.

use DBI;
use DBD::mysql;

obiges sagt dem perl dass wir diese module verwenden wollen.

my $dbh=DBI->connect("dbi:mysql:cocktails:", "maxmeier", "geheim")
or die "kann nicht auf datenbank zugreifen\n";

obiges oeffnet eine verbindung zur datenbank. die verbindung wir hier in
dem object $dbh gespeichert. wir koennen dieses objekt ab jetzt benutzen
um auf die datenbank zuzugreifen.

die einfachste variante ist dabei die ->do() methode:

$dbh->do("insert into cocktails (name,preis) values('bloody marry',8.5)");

die do methode fuehrt den sql befehl sofort aus. meist will man natuerlich
nicht konstanten sondern variablen eintragen. ein beliebter fehler ist es
einfach string substitution zu verwenden um den sql befehl zu erzeugen.
man sollte es aber so machen:

$drinkname='bloody marry';
$preis=8.50;

$sql= "insert into cocktails (name,preis) values(" .
$dbh->quote($drinkname) . "," . $dbh->quote($preis) . ")" ;

$dbh->do($sql);

die funktion $dbh->quote() fuegt zum string die anfuehrungszeichen hinzu
und sort dafuer dass bereits im text vorhandenen anfuehrungszeichen
richtig mit escape sequenzen versehen werden.. (anosnsten wuerde ein im
einzusetzendes text unseren sql befehl total zerstoeren.. und unter
umstaenden sogar beliebige sql funktionen ausfuehren...)

hat man sql befehle die ergebnisse zurueckliefern (vorwiegend SELECT) so
verwendet man z.b. folgende form:

my $sth=$dbh->prepare("select * from cocktails");
$sth->execute();

while(my $href=$sth->fetchrow_hashref()) {
print $href->{"name"},"\n";

}
$sth->finish();

das $dbh->prepare bereitet das sql statment zur aufuehrung vor und liefert
ein objekt zurueck mit dem man das satement dann ausfuehren kann.
->execute() (fuehrt dann das statement aus. ->fetchrow_hasref liefert eine
refernez auf einen hash zurueck (ueber refernezen lernen wir noch. man
kann sie wie normale hases verwenden nur schreibt man vor der {} ein -> )

das $sth->finnish(); besagt dass wir keine weitren daten aus diesem select
mehr abfragen wollen.

$dbh->disconnect() schliesst am ende die datenbank verbindung wieder.

while(my $href=$sth->fetchrow_hashref()) {
foreach my $k (keys %$href) {
print $href->{"$k"}," ";
}
print "\n";
}
$sth->finish();

wuerde alle spalten mit allen zeilen einer ergebnisstabelle ausgeben.

EXERCISES:

* schreibe ein kurzes perl script dass das einfuegen von drinks in die
tabelle erlaubt in dem man das scipt mit 2 parametern name und preis
aufruft. zb.:

./drinkdb.pl caprinha 7.20

wenn man das script ohne parameter aufruft soll es eine liste aller
drinks ausgeben.

* schreibe obiges script um in ein CGI script das die cocktails anzeigt
und das einfuegen neuer cocktails via forumlar erlaubt. achte auf
sicherheitsaspekte.

* schreibe ein script dem man den namen einer datenbank ueberigbt und das
dann alle tabellen dieser datenbank ("show tables") und dann alle felder
aller tabellen ausgibt.

_______________________________________________
CD ist ein service von SILVER SERVER
der inhalt unterliegt der GFDL
_______________________________________________



[back to top]



Userdaten
User nicht eingeloggt

Gesamtranking
Werbung
Datenbankstand
Autoren:04511
Artikel:00815
Glossar:04116
News:13565
Userbeiträge:16552
Queueeinträge:06248
News Umfrage
Ihre Anforderungen an ein Online-Zeiterfassungs-Produkt?
Mobile Nutzung möglich (Ipone, Android)
Externe API Schnittstelle/Plugins dritter
Zeiterfassung meiner Mitarbeiter
Exportieren in CSV/XLS
Siehe Kommentar



[Results] | [Archiv] Votes: 1158
Comments: 0