ARRAY(0x8231334) <== Hilfe!
Aqua
- perl
Hallöchen!
#!/usr/bin/perl
use CGI;
use strict;
use DBI;
my $cgi = CGI->new();
my $dbh=DBI->connect('DBI:mysql:database=foo;host=localhost','root','');
my $user = $cgi->param("user");
print "Content-type: text/html\n\n";
my @available;
my $alle=$dbh->selectall_arrayref("SELECT user FROM bilderuser WHERE user LIKE '%'");
foreach my $einer(@$alle) { push(@available, $einer); }
for (@available)
{
print "$_<br>\n";
}
ARRAY(0x8231334)
ARRAY(0x8231358)
ARRAY(0x823137c)
ARRAY(0x82313a0)
Diese Hashes bzw. Arrays in der Ausgabe sollen verschwinden.
Woher kommen die?
Wie gehen sie weg?
Danke!
Aqua
Hallo,
my $alle=$dbh->selectall_arrayref("SELECT user FROM bilderuser WHERE user LIKE '%'");
Die Where-Klausel ist noch nicht der Letztstand, oder?
foreach my $einer(@$alle) { push(@available, $einer); }
for (@available)
{
print "$_<br>\n";
}
Wozu sind eigentlich diese beiden Schleifen? Den einzigen Grund, den ich sehen kann, ist der, daß Du, warum auch immer, Rechenzeit vernichten mußt *g*. Mache doch die Ausgabe gleich in der ersten Schleife. Dann ist @available auch gleich überflüssig.
Aber nun zu Deinem eigentlichen Problem.
$alle enthält nach selectall_arrayref eine Referenz auf ein Array, dessen Werte wiederum Referenzen auf Arrays sind. Nur so ist es möglich, Daten aus select-Statements, die mehr als eine Spalte abfragen, intern abzulegen. D.h. nun, daß Du jeden Wert im Array @$alle ebenfalls dereferenzieren mußt. In perldoc perldsc steht, wie es geht.
Noch etwas zu selectall_*. Ich hoffe, Dir ist klar, daß es, wenn Du damit viele Daten aus der Datenbank abfrägst, sehr viel Speicher belegst. Ich halte es grundsätzlich für sinnvoll, solche Funktionen nur in Ausnahmefällen zu verwenden. Separate Aufrufe von prepare, execute und fetchrow_* sind in der Regel wesentlich effizienter. Und die Einsparung an Code ist eigentlich wirklich nur marginal (eine bzw.zwei Zeilen, wenn ich mich nicht ganz irre).
Irgendwie entspricht das dem oft verwendeten
open(IN,$file);
@inhalt = <IN>;
close IN;
foreach (@inhalt)
{
machwasmit($_);
}
das ja auch vollkommen uneffizient ist.
Grüße
Klaus