Font
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]3391[/thread]

$sth->fetchrow: will nicht so wie ich



<< |< 1 2 3 >| >> 22 entries, 3 pages
pktm
 2004-01-03 16:31
#35845 #35845
User since
2003-08-07
2921 articles
BenutzerIn
[Homepage]
user image
Hallo!
Ich würde gerne von den Einträgen in meiner Datenbank 2 Werte (titel & keyword) auslesen und die dann als $hash = { titel => $titel, keyword => $keyword, } ausgeben lassen.
Dachte, das ginge so:
Code: (dl )
1
2
3
4
5
6
    { # seiten auslesen
my $cmd = "SELECT titel, keyword FROM seiten";
my $sth = $dbh->prepare($cmd) || die $dbh->errstr;
my $rv = $sth->execute || die $dbh->errstr;
print STDERR Dumper( $sth->fetchrow_hashref() );
} # /seiten auslesen


Nur irgendwie bekomme ich da nur die Werte der ersten Süpalte der DB zurück.
Bspl:
$VAR1 = {
'keyword' => 'aaagsadafaafsaa',
'titel' => 'aaagsadafaafsaa'
};
Muss man da noch irgendwas machen, damit man von allen Werten die Eegebnisse erhält?
mfg pktm

PS: titel ist unique, d.h. es können sich bei diesem Select keine Werte überschreiben.
http://www.intergastro-service.de (mein erstes CMS :) )
pq
 2004-01-03 17:02
#35846 #35846
User since
2003-08-04
12208 articles
Admin1
[Homepage]
user image
[quote=pktm,03.01.2004, 15:31]Nur irgendwie bekomme ich da nur die Werte der ersten Süpalte der DB zurück.[/quote]
??
du meinst die erste spalte, nehme ich an? das ist merkwürdig, denn du machst
ja ein select auf 2 spalten.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
pktm
 2004-01-03 18:37
#35847 #35847
User since
2003-08-07
2921 articles
BenutzerIn
[Homepage]
user image
Äh, nein, verdammt, warum muss ich immer Spalte und Zeile verwechseln.
Also wie das Beispiel oben&acute;zeigt bekomme ich nur die erste Zeile zurück, davon allerding die selektierten Spalten titel & keywords.
mfg pktm
http://www.intergastro-service.de (mein erstes CMS :) )
pq
 2004-01-03 19:33
#35848 #35848
User since
2003-08-04
12208 articles
Admin1
[Homepage]
user image
naja, fetchrow_hashref() sollte dir ja auch nur eine zeile liefern. denn es heisst
ja fetchrow und nicht fetchrows. also mach halt eine schleife drumherum und lies
evtl. einfach die doku zu der funktion.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
pktm
 2004-01-03 19:54
#35849 #35849
User since
2003-08-07
2921 articles
BenutzerIn
[Homepage]
user image
Quote
@row_ary = $sth->fetchrow_array;
$ary_ref = $sth->fetchrow_arrayref;
$hash_ref = $sth->fetchrow_hashref;

Ist irgendwie das einzige, was sich in meiner Doku findet :(
Werde mal suchen.
http://www.intergastro-service.de (mein erstes CMS :) )
pq
 2004-01-03 20:10
#35850 #35850
User since
2003-08-04
12208 articles
Admin1
[Homepage]
user image
oh, das ist nicht viel. perldoc DBI hat bei mir aber mehr als 3 zeilen, und eine suche nach
fetchrow_hashref findet dann auch die doku zu dieser funktion.
aber warum nimmst du nicht meinen tip, eine schleife drumherum zu bauen?
so funktionieren die meisten DBI-funktionen. hast du was gegen schleifen?
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
pktm
 2004-01-03 20:14
#35851 #35851
User since
2003-08-07
2921 articles
BenutzerIn
[Homepage]
user image
Habe mir deinen Tipp zu Herzen genommen und dashier fabriziert (funktioniert sogar):
Code: (dl )
1
2
3
while ( my ($keyword, $titel) = $sth->fetchrow_array() ) {
print STDERR "KEY: $keyword => TITEL: $titel\n";
}

Die 3 Zeilen stammen übrigens aus einer deutschen "Übersetzung" der Manpage.
Habe mir die englische nochmal vorgeknöpft und mehr oder minder alles gefunden (wenn man doch nur englisch könnte...).
thx & mfg pktm
http://www.intergastro-service.de (mein erstes CMS :) )
Cremator
 2004-01-03 21:14
#35852 #35852
User since
2003-11-26
97 articles
BenutzerIn
[default_avatar]
Wenn Du unbedingt alles haben willst nimm fetchall_arrayref. Dann bekommst Du eine Referenz auf ein Array of Hashes zurueck:
Code: (dl )
1
2
3
4
$ref = $sth->fetchall_arrayref;
for ($i = 0; $i < scalar @{$ref}; $i++){
printf "Zeile %d - Key: %s Titel: %s\n", $i, $ref->[$i]->{'keyword'}, $ref->[$i]->{'titel'};
}
pktm
 2004-01-03 21:53
#35853 #35853
User since
2003-08-07
2921 articles
BenutzerIn
[Homepage]
user image
Habe ich mir auch gedacht, aber damit konnte ich nicht sio gut umgehen wie mit der obigen Variante.
Und da ich so oder so eine Schleife brauche kann ich auch die Variante da oben nehmen.
mfg pktm
http://www.intergastro-service.de (mein erstes CMS :) )
steffenw
 2004-01-04 21:57
#35854 #35854
User since
2003-08-15
692 articles
BenutzerIn
[Homepage] [default_avatar]
Man kann auch
Code: (dl )
1
2
3
foreach my $ref ( @{ $sth->fetchall_arrayref } ) {
 print STDERR "KEY: $ref->{keyword} => TITEL: $ref->{titel}\n";
}
schreiben.

Ich hasse nämlich Indizierung, wenn sie nicht notwendig ist. Das Programm wird kompliziert im Code und gleichzeitig langsam.\n\n

<!--EDIT|steffenw|1073246288-->
$SIG{USER} = sub {love 'Perl' or die};
<< |< 1 2 3 >| >> 22 entries, 3 pages



View all threads created 2004-01-03 16:31.