HJK: DBI fetchrow_array

Hi,

wie kann ich denn sth->fetchrow_array() mehrmals laufen lassen ohne die Abfrage gegen die DB nochmal machen zu müssen?

Beispiel:

htmlcode ...  
while ( my @row = $sth->fetchrow_array() )  
{  
    my $db_g = HTML::Entities::encode_entities(decode('UTF-8',$row[0]));  
    my $db_b = HTML::Entities::encode_entities(decode('UTF-8',$row[1]));  
    print "<option value=\"$db_g\">$db_b</option>\n";  
}  
htmlcode ...  
while ( my @row = $sth->fetchrow_array() )  
{  
    my $db_g = HTML::Entities::encode_entities(decode('UTF-8',$row[0]));  
    my $db_b = HTML::Entities::encode_entities(decode('UTF-8',$row[1]));  
    print "<option value=\"$db_g\">$db_b</option>\n";  
}  
htmlcode ...

Beim erstem Mal klappt das fetchrow_array()(wie erwartet) und beim zweiten mal nicht (wie erwartet). Gibt es dafür ein elegante Lösung?

Danke.

Gruss
HJK

  1. Hi,

    Beim erstem Mal klappt das fetchrow_array()(wie erwartet) und beim zweiten mal nicht (wie erwartet).

    Der Zeiger auf den aktuellen Datensatz des Resultsets steht nach dem Abholen des letzten Datensatzes "hinter" diesem. Wenn du alle Datensätze noch mal abholen willst, musst du diesen erst zurücksetzen. (K.A., wie man das bei Perl bzw. dem von dir ggf. eingesetzten Modul macht - also in der Doku nachlesen gehen.)

    Gibt es dafür ein elegante Lösung?

    Die DB-Schnittstelle mit mehrfachem Durchlaufen eines Ergebnissets zu belasten, ist meistens unnötig - hole dir die Daten einmal, lege sie in einer Datenstruktur wie einem Array ab - dann kannst du dieses im Script so oft durchlaufen, wie du möchtest.

    MfG ChrisB

    --
    Light travels faster than sound - that's why most people appear bright until you hear them speak.