4 Stimmen

Rückgabe von MySQL-Ergebnissen als Hash-Tabellen in Perl

In Perl erstelle ich eine SQL-Abfrage, die der folgenden ähnelt:

SELECT `id`, `title`, `price` FROM `gamelist`

Was ich tun möchte, ist das Ergebnis dieser Abfrage zu nehmen und es in eine Hash-Tabelle ausgeben. Ich verwende DBI und derzeit weiß ich nur, wie man das Folgende tut:

my %results;
my $count = 0;
while( @result = $statement->fetchrow() ){
    %results{'id'}[$count] = $result[0];
    %results{'title'}[$count] = $result[1];
    %results{'price'}[$count] = $result[2];
    $count++;
}

Ich verwende jedoch nicht gerne $result[0] und vertrauen darauf, dass das erste Feld die ID sein wird. Ich würde viel lieber etwas haben wie:

my %results;
my $count = 0;
while( %result = $statement->fetchrow_as_hashtable() ){
    %results{'id'}[$count] = %result{'id'};
    %results{'title'}[$count] = %result{'title'};
    %results{'price'}[$count] = %result{'price'};
    $count++;
}

Ich habe versucht, auf Google zu suchen, konnte aber nicht viele gute Antworten finden, die in DBI/Perl integriert sind. Ich habe eine Open-Source-Klasse gefunden, die diese Funktionalität anbietet, aber ich habe das Gefühl, dass dies ohne die Verwendung einer anderen Klasse möglich sein sollte.

9voto

Joel Berger Punkte 20014

Was ist mit fetchrow_hashref ?

5voto

Bao Punkte 326
while (my $result = $statement->fetchrow_hashref) {
        print $result->{id};
        print $result->{title};
        print $result->{price};
}

Verwenden Sie fetchrow_hashref, um das Ergebnis direkt in einem Hash zu erhalten

4voto

ErikR Punkte 50915

Konsultieren Sie die DBI Dokumentation für diese Verwendung von selectall_arrayref :

 $rows = $dbh->selectall_arrayref($query, {Slice=>{}}, @params)

$rows ist ein Array von Hashes.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X