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

SELECT Ergebnis als String klappt nicht



<< >> 6 Einträge, 1 Seite
rk-ger
 2007-01-29 23:21
#35142 #35142
User since
2006-08-07
45 Artikel
BenutzerIn
[default_avatar]
Hallo,

ich möchte das Ergebnis eines Selects als String ausgeben. Leider klappt das nicht, welchen Fehler mache ich?

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
  my $var1;
my $dbhandle = DBI->connect($DB_TYPE, $STAT_DB_USER, $STAT_DB_PASS, {RaiseError => 0}) or die "Database connection not made: $DBI::errstr";
my $sql = "SELECT * FROM parcel_out";
my $sth = $dbhandle->prepare($sql);
$sth->execute();
foreach my $row ($sth->fetchrow_arrayref()){
print ".HIER\n";
$var1 = join("|",@row);
print "$var1\n";
}
print ".FERTIG\n";
$dbhandle->disconnect();


Es müssten über 1800 Zeilen in der Form
wert|wer2|wert3|etc...
erscheinen.

Leider kommt nur
Quote
.HIER

.FERTIG


Weder in $row noch in @row scheint was drinzustehen. Warum?\n\n

<!--EDIT|rk-ger|1170105763-->
ptk
 2007-01-30 00:26
#35143 #35143
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Benutzt du use strict?
rk-ger
 2007-01-30 00:39
#35144 #35144
User since
2006-08-07
45 Artikel
BenutzerIn
[default_avatar]
use strict; und
use warnings;
sind Standard. Ich habe den Code nur nicht komplett gepostet.
MartinR
 2007-01-30 08:07
#35145 #35145
User since
2004-06-17
305 Artikel
BenutzerIn
[default_avatar]
... aus der DBI-Doku
 
Code: (dl )
1
2
3
4
5
  while($row = $sth->fetchrow_arrayref) {
   # this is a fast and simple way to deal with nulls:
   foreach (@$row) { $_ = '' unless defined }
   print "@$row\n";
 }
renee
 2007-01-30 08:50
#35146 #35146
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code: (dl )
1
2
3
4
5
  foreach my $row ($sth->fetchrow_arrayref()){
print ".HIER\n";
$var1 = join("|",@row);
print "$var1\n";
}


Was Du hier machst:

Code: (dl )
  foreach my $row ($sth->fetchrow_arrayref()){

Du willst über alle Elemente der Liste iterieren, die $sth->fetchrow_arrayref liefert. Da Du immer nur eine Zeile anforderst bei dem Aufruf, bekommst Du nur ein Element zurück (deswegen muss die while-Schleife verwendet werden - wie von MartinR gezeigt). Die Arrayreferenz speicherst Du in dem SCALAR $row.

Das print ist klar...

Code: (dl )
       $var1 = join("|",@row);


Du speicherst in $var einen String, der aus allen Elementen des ARRAYs @row zusammengesetzt ist (mit jeweils eineim | zwischen den Elementen). Auch wenn Du den gleichen "Namen" verwendest, sind doch SCALAR und ARRAY etwas komplett unterschiedliches...

Wie ptk schon anmerkte, solltest Du Wiki:[tt]use strict[/tt] verwenden...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
rk-ger
 2007-01-31 09:19
#35147 #35147
User since
2006-08-07
45 Artikel
BenutzerIn
[default_avatar]
Danke an alle,

jetzt habe ich es wohl begriffen.
<< >> 6 Einträge, 1 Seite



View all threads created 2007-01-29 23:21.