hallo ceejay,
While( $record_hash = $sth->fetchrow_hashref() ) {
my $ausgabe;
...
foreach $Feld (keys %record_hash) {
»» $ausgabe .= "Feldname: ".$Feld."\tInhalt: ".$record_hash{$Feld}."\n";
»» }
'$record_hash' ist _kein_ Hash. Es ist eine Referenz auf ein Hash.
'$record_hash' und '%record_hash' sind zwei verschiedene Dinge.Das ist Dein Problem.
es sollte vielmehr lauten:
foreach $Feld (keys %$record_hash)
{
$ausgabe .= "Feldname: ".$Feld."\tInhalt: ".$record_hash->{$Feld}."\n";
}
Da sind zwar _nur_ drei Zeichen mehr, aber das machts voll aus.
Andererseits:
mit '$sth->{NAME}' bekommst Du eine Array-Referenz auf die im SQL-Statement verwendeten Felder zurück.
Dadurch könnte es so aussehen (jetz mal ohne Fehlerbehandlung):
$sth = $dbh->prepare($sql_statement);
$sth->execute();
while ($werte = $sth->fetch_arrayref)
{
my($ausgabe);
for my $idx (0 .. $#{$sth-{NAME} )
{
$ausgabe .= 'Feldname: ' . $sth-{NAME}->[$idx] . "\tInhalt: " . $werte->[$idx] . "\n";
}
}
Der Vorteil einer Methode wie dieser ist der, daß die Felder in der richtigen. entsprechend dem Statement angeordneten, Reihenfolge ausgelesen werden, und nicht, wie bei einem Hash, in einer 'zufälligen'.
Außerdem, so hab ich mir sagen lassen, ist's auch schneller, weil das DD-Modul nicht noch extra ein Hash erzeugen muß.
(Ich hoffe, ich hab' jetzt nirgendwo einen Tippfehler drin, oder sonst einen Wurm. Hab's wieder mal nicht getestet :-( )
Grüße
Klaus