Embperl - building dynamic websites with Perl


Datenbankzugriff
[ << Prev: Debugging ] [ Content ] [ Next: Sicherheit >> ]



DBItop

Dies ist ein weiteres Beispiel für den Datenbankzugriff mittels DBI. Im Gegensatz zum vorhergehenden Beispiel arbeitet es aber mit expliziten Schleifen.

 [-
 # Mit der Datenbank verbinden
 $dbh = DBI->connect($DSN) ;
 # Vorbereiten des SQL Select
 $sth = $dbh -> prepare ("SELECT * from $table") ;

 # Abfrage ausführen
 $sth -> execute ;

 # Ermitteln der Feldnamen für die Überschrift in $head
 $head = $sth -> {NAME} ;
 -]

 <table>
    <tr>
    [$ foreach $h @$head $]
        <th>[+ $h +]</th>
    [$ endforeach $]
    </tr>
    [$ while $dat = $sth -> fetchrow_arrayref $]
        <tr>
            [$ foreach $v @$dat $]
                <td>[+ $v +]</td>
            [$ endforeach $]   
        </tr>
    [$ endwhile $]
 </table>


DBIx::Recordsettop

DBIx::Recordset ist ein Modul welches den Datenbankzugriff vereinfachen soll. Eine weiterführende Einführung zu DBIx::Recordset und Embperl findet sich in der iX 9/1999 unter https://www.heise.de/select/ix/archiv/1999/9/seite-142/pdf (erfordert Anmeldung).



Datenbankabfrage Beispieltop
 [-*set = DBIx::Recordset -> Search ({%fdat,
				     ('!DataSource'   => $DSN,
				      '!Table' => $table,
				      '$max'   => 5,)}) ; -]
 <table>
  <tr><th>ID</th><th>NAME</th></tr>
  <tr>
    <td>[+ $set[$row]{id} +]</td>
    <td>[+ $set[$row]{name} +]</td>
  </tr>
 </table>
 [+ $set -> PrevNextForm ('Previous Records',
			  'Next Records',
			  \%fdat) +]


Search erzeugt ein Recordsetobjekttop

Search nimmt die Werte aus %fdat und benutzt diese um einen SQL WHERE Ausdruck zu erzeugen. Auf diese Weise hängt es davon ab, was an das Dokument für Daten gesandt werden, welche Anfrage ausgeführt wird. z.B. wenn man das Dokument mit https://host/mydoc.html?id=5 aufruft, werden alle Datensätze deren Feld id den Wert 5 enthält angezeigt.



Die Daten können als Array oder mittels eines aktuellen Datensatzzeigers angesprochen werdentop

Das Ergebnis der Abfrage kann wie ein Array angesprochen werden (was nicht heißt, daß das ganze Array auch tatsächlich von der Datenbank angefordert wird). Alternativ können die Felder des aktuellen Record angesprochen werden.

    set[5]{id}   Zugriff auf das Feld 'id' des sechsten gefundenen Datensatzes
    set{id}      Zugriff auf das Feld 'id' des aktuellen Datensatzes


Felder können mit ihren Namen angesprochen werdentop

Während bei DBI Feldinhalte hauptsächlich über ihre Spaltennummern angesprochen werden, benutzt DBIx::Recordset Spaltennamen. Dies macht das Programm einfacher zu schreiben, leichter verständlich und unabhäniger von Veränderungen in der Datenbankstruktur.



PrevNextForm erzeugt keinen/einen/zwei Schaltflächen je nachdem ob weitere Datensätze angezeigt werden müssentop

Die PrevNextButtons Funktion kann dazu benutzt werden um Schaltflächen zum Anzeigen der vorhergehenden bzw. folgenden Datensätze zu erzeugen. PrevNextForm generiert ein kleines Formular welches alle nötigen Daten als versteckte Felder enthält.



Wie fürs Suchen, gibt es auch Funktionen für Insert/Update/Deletetop

Beispiel für Insert

Wenn %fdat die Daten für einen neuen Datensatz enthält, fügt der folgende Code einen diesen der angegebenen Tabelle hinzu.

 [-*set = DBIx::Recordset -> Insert ({%fdat,
				      ('!DataSource'   => $DSN,
				       '!Table' => $table)}) ; -]


Datenbanktabellen können ebenso an einen Hash gebunden werdentop

DBIx::Recordset kann ebenfalls eine Datenbanktabelle an einen Hash binden. Man muß lediglich den Primärschlüssel der Tabelle angeben und kann dann auf die Tabelle mittels eines Perl Hashs zugreifen.

    $set{5}{name}    Zugriff auf Feld 'name' mit id=5
		     (id ist Primärschlüssel)


Arbeiten mit mehreren Tabellentop

DBIx::Recordset bietet zahlreiche Möglichkeiten um einfach mit mehreren Tabellen umgehen zu können. DBIx::Recordset versucht auf Grund der Namen innerhalb der Datenbank selbstständig Zusammenhänge zwischen Tabellen zu erkennen. Weitere Zusammenhänge können manuell angegeben werden. Mit diesen Informationen kann DBIx::Recordset automatisch Unterobjekte erzeugen, die die zum entsprechenden Datensatz zugehörigen Datensätze der verbundenen Tabelle enthalten. Ebenso ist es möglich das DBIx::Recordset einer Abfrage automatisch Felder hinzufügt, die den referenzierten Datensatz beschreiben. So ist es z.B. möglich, wenn in einer Tabelle die Kundennr enthalten ist, aus dem Kundenstammsatz automatisch den Namen des Kunden hinzuzufügen, ohne das diese jedesmal explizit angeben werden müßte.


[ << Prev: Debugging ] [ Content ] [ Next: Sicherheit >> ]


© 1997-2023 Gerald Richter / actevy