Home - Datenbanken und Perl www.sqldocu.com
zurück vor



Programm Code


Beschreibung
top
Hier versuchen wir zu zeigen wie SQL Befehle in PerlSkripts verwendet werden. Man spricht von embedded (eingebetetes) SQL. Um auf ein RDBMS (DatenbankServer) zugreifen zu können ist folgendes nötig:
  • Module DBI laden
  • Verbindung zum RDBMS herstellen
  • SQL Anweisung
  • Verbindung zum RDBMS trennen
In Abschnitt SQL Anweisungen mit Perl wird besonders auf den Syntax von SQL Anweisungen eingegangen.


Syntax
top
Unten listen wir ein PerlSkript auf, das sich mit einem MySQL RDBMS verbindet. Das RDBMS läuft auf dem gleichen Rechner wie das PerlSkript, deshalb können wir als HostNamen localhost verwenden. Das Skript erzeugt die Datenbank meineDB und gibt anschliessend
Beispiel Code zur Erstellung einer Datenbank mit Perl
aus.

Zeile1:
Zeile2:
Zeile3:
Zeile4:
Zeile5:
Zeile6:
Zeile7:
Zeile8:
Zeile9:
Zeile10:
Zeile11:
Zeile12:
Zeile13:
Zeile14:
Zeile15:
Zeile16:
Zeile17:
#!d:/perl/bin/perl.exe -w # Pfad und Name des Perl Interpreters
use CGI::Carp qw(fatalsToBrowser); # sendet Fehlermeldungen an Browser
use DBI; # Module DBI wird verwendet
$ENV{INFORMIXDIR}="/opt/Informix80";
# Umgebungsvariable setzen
$ENV{INFORMIXSERVER}="databaseServer";
# Umgebungsvariable setzen
$dsn = "DBI:mysql:database=test;host=localhost;port=3306";  
$dbh = DBI->connect( $dsn,'root','geheim' ); # Datenbank Verbindung wird hergestellt
$sth = $dbh->prepare(q{'CREATE DATABASE meineDb'}); # SQL Befehl wird vorbereitet
$sth->execute; # Ausführen des SQL Befehls
$sth->finish; # Ressourcen werden freigegeben
$dbh->disconnect(); # Datenbank Verbindung wird beendet
print "Content-type: text/html\n\n"; # HTML header wird erzeugt
print "<html><head>\n";  
print "<title>Datenbank erstellen</title>\n";  
print "</head><body>\n";
print "Beispiel Code zur Erstellung einer Datenbank mit Perl\n";  
print "</body></html>\n";

Achtung: Damit Skript funktioniert muss Benutzername und Passwort richtig gesetzt sein! zB: für MySQL Standardeinstellung muss Zeile 7 lauten:
  $dbh = DBI->connect( $dsn,'root','' );


Pfad zum PerlInterpreter
top
#!d:/perl/bin/perl.exe -w

In der ersten Zeile eines PerlSkripts muss der Pfad zum Interpreter angegeben werden. Diese Zeile muss in der ersten Zeile stehen, und selbst ein Leerzeichen vor # verursacht einen Fehler (siehe Abschnitt Syntax, Zeile 1). Die Option -w am Ende ist nicht notwendig. Sie bewirkt, dass neben Fehlermeldungen auch Warnungen angezeigt werden.
Hinweis: Sind entsprechende Umgebungsvariblen gesetzt, kann es vorkommen das die Pfadangaben ignoriert werden, und ein anderer Interpreter aufgerufen wird.
Mit folgenden Code kann man Umgebungsvariablen ausgeben lassen:

#!d:/perl/bin/perl.exe -w
print "Content-type: text/plain\n\n";
foreach $var (sort(keys(%ENV)))
 {
 $val = $ENV{$var};
 $val =~ s|\n|\\n|g;
 $val =~ s|"|\\"|g;
 print "${var}=\"${val}\"\n";
 }


Fehlermeldung an Browser umleiten (optional)
top
use CGI::Carp qw(fatalsToBrowser);

Mit dem Befehl use wird ein Module geladen (siehe Abschnitt Syntax, Zeile 2). In diesem Fall laden wir das Module Carp. Es bewirkt, dass Fehlermeldungen an den Browser weitergeleitet werden. Natürlich ist es nicht umbedingt erforderlich und macht nur Sinn, wenn Perl verwendet wird um HTML Seiten zu erstellen. In der Testphase ist das Module sehr zu empfehlen. Es sollte unmittelbar nach der Zeile mit dem Interpreterpfad stehen, da die Fehlerumleitung erst ab der Zeile wirkt, in der das Modul geladen wird (scheint selbstverständlich zu sein, ist es aber nicht).



Module DBI laden
top
use DBI;

Mit dem Befehl use wird ein Module geladen (siehe Abschnitt Syntax, Zeile 3). In diesem Fall laden wir das Module DBI (DBI -> DataBaseInterface, siehe benötigte Software für Perl). Es bewirkt, dass Fehlermeldungen an den Browser weitergeleitet werden. Natürlich ist es nicht umbedingt erforderlich und macht nur Sinn, wenn Perl verwendet wird um HTML Seiten zu erstellen. In der Testphase ist das Module sehr zu empfehlen. Es sollte unmittelbar nach der Zeile mit dem Interpreterpfad stehen, da die Fehlerumleitung erst ab der Zeile wirkt, in der das Modul geladen wird (scheint selbstverständlich zu sein, ist es aber nicht).



Umgebungsvariablen setzen (optional)
top
$ENV{INFORMIXDIR}="/opt/Informix80";
$ENV{INFORMIXSERVER}="databaseServer";

Mit dem Befehl $ENV{Name der UmgebungsVariablen} können Umgebungsvariablen gesetzt werden. Hier wird:
INFORMIXDIR = "/opt/Informix80" und
INFORMIXSERVER = "databaseServer"
gesetzt. Diese werden Module DBI-informix für das RDBMS Informix verwendet. Da wir uns mit einem MySQL RDBMS verbinden, sind diese Anweisung nicht notwendig. Sie stehen an dieser Stelle nur zu Demonstrationszwecke (siehe Abschnitt Syntax, Zeile 4 und 5).
Nur wenn erforderliche Umgebungsvariablen nicht gesetzt sind, ist die Anweisung nötig.
Hinweis: Aus Sicherheitsgründen werden von Webservern Zugriffe manchmal unter Benutzern mit wenig Rechten ausgeführt. Wichtig Umgebungsvariablen sind für diese Benutzer selten gesetzt. Daher bei Fehlermeldungen nicht vergessen Umgebungsvariablen zu überprüfen (siehe Umgebungsvariablen ausgeben).



Verbinden zum RDBMS
top
$dsn = "DBI:mysql:database=test;host=localhost;port=3306";
$dbh = DBI->connect( $dsn,'root','geheim' );

Mit dem Befehl DBI->connect() wird eine Verbindung zum RDBMS ergestellt.

DBI:mysql ... Verbindung zu einem RDBMS des Herstellers MySQL herstellen.
host=localhost ... Verbindung zum Rechner mit der InternetAdresse localhost herstellen. Hier könnte auch eine IP Adresse wie 196.231.654 stehen.
port=3306 ... Port 3306 zum Verbinden verwenden.
root ... Benutzernamen, unter dem Verbindung hergestellt werden soll
geheim ...  Passwort des Benutzers root

siehe Abschnitt Syntax, Zeile 6 und 7).



Datenbank erzeugen
top
$sth = $dbh->prepare( 'CREATE DATABASE meineDb' );
$sth->execute;
$sth->finish;

Mit der SQL Anweisung CREATE DATABASE wird eine Datenbank erstellt. Um eine SQL Anweisung mittels Perl auf einem RDBMS durchzuführen sind immer 3 Schritte notwendig

prepare ... Übersetzt bedeutet prepare "vorbereiten".
execute ... Übersetzt bedeutet execute "durchführen".
finnish ... Übersetzt bedeutet execute "abschliessen bzw. beenden".

siehe Abschnitt Syntax, Zeile 8, 9 und 10).
In Abschnitt SQL Anweisungen mit Perl wird auf die Besonderheiten aller wichiger SQL Anweisungen in Perl eingegangen.



Vom RDBMS trennen
top
$dbh->disconnect();

Mit der Befehl disconnect() wird die Verbindung zum RDBMS beendet (siehe Abschnitt Syntax, Zeile 11).




HTML Code erzeugen
top
print "Content-type: text/html\n\n";
print "<html><head>\n";
print "<title>Datenbank erstellen</title>\n";
print "</head><body>\n";
print "Beispiel Code zur Erstellung einer Datenbank mit Perl\n";
print "</body></html>\n";

Mit diesen Zeilen wird eine HTML Seite erzeugt die

Beispiel Code zur Erstellung einer Datenbank mit Perl

ausgibt (siehen Syntax, Zeile 12-17).



top