[+] perl + InterBase - pobieranie danych z bazy

Potrzebujesz pomocy z C, C++, perl, python, itp.
Awatar użytkownika
markossx
Beginner
Posty: 489
Rejestracja: 26 maja 2007, 16:01
Lokalizacja: Polska

[+] perl + InterBase - pobieranie danych z bazy

Post autor: markossx »

Witam,

Próbuje napisać skrypt, który pobierze mi dane z bazy i je wyświetli na ekran.
Mam takie coś:

Kod: Zaznacz cały

my $sth = $dbh->prepare("select pole1, pole2, pole3, pole4, pole5 from dane where (pole1 = 1)") || "Can't prepare statement: $DBI::errstr";
$sth->execute() or die "Can't execute statement: $DBI::errstr";
my $row = $sth->fetchall_arrayref();
foreach my $rowS( @$row ) {
	(my $data) = @$rowS;
    print "$data\n";
     }
print "Query will return $sth->{NUM_OF_FIELDS} fields.\n\n";
print "Field names: @{ $sth->{NAME} }\n";
Kombinuje, kombinuje jak tu napchać danych do zwykłej tablicy albo do hasha (bez różnicy) i potem to wyrzucić na ekran. Osiągnąłem, że wypluwa jedynie pierwszy rekord, a jest przecież więcej :-(
Jeśli ktoś jest w stanie podpowiedzieć jak to ogarnąć z góry dzięki.

pzdr.
Awatar użytkownika
lessmian2
Member
Posty: 1088
Rejestracja: 30 kwietnia 2008, 19:38
Lokalizacja: Kraków

Post autor: lessmian2 »

Można np. tak:

Kod: Zaznacz cały

my $zapytanie = $dbh->prepare( "SELECT ...");
$zapytanie->execute() || die $zapytanie->errstr;
while (my $row=$zapytanie->fetchrow_arrayref())
{
print "@{$row}\n";
}
Do poszczególnych pól możesz się dobrać przez

Kod: Zaznacz cały

@{$row}[0] .. @{$row}[n]
a w pętli while możesz sobie to wyświetlić od razu albo powrzucać to do tablicy i robić z tym co Ci się podoba ;-)
Awatar użytkownika
markossx
Beginner
Posty: 489
Rejestracja: 26 maja 2007, 16:01
Lokalizacja: Polska

Post autor: markossx »

Wielkie dzięki za objaśnienie:
Wcześniej jednak zrobiłem tak:

Kod: Zaznacz cały

$sth->execute;
while (my @row = $sth->fetchrow_array) {
  print "@row\n";
};
i też ładnie chodzi, zastanawia mnie jedynie dlaczego

Kod: Zaznacz cały

print "@row\n";
nie łamie wiersza jak jest zadane...
Myślę, że jeszcze pól roku, rok i nie będę zadawał tak elementarnych pytań w kwestii Perla.
Jeszcze raz dzięki.
Awatar użytkownika
lessmian2
Member
Posty: 1088
Rejestracja: 30 kwietnia 2008, 19:38
Lokalizacja: Kraków

Post autor: lessmian2 »

Nie łamie wierszy bo nie napisałeś mu "po wyświetleniu pojedyńczego elementu tablicy przejdź do nowego wiersza" tylko "wyświetl zinterpolowaną tablicę a na końcu przejdź do nowej linii". Więc wyświetlił wszystkie elementy tablicy oddzielone spacjami (domyślna wartość, można ją zmienić - man perlvar) i dopiero na końcu przeszedł do nowej linii. Jeśli masz jakąś listę np @lista, to każdy jej element można wyświetlić w nowej linii tak (chyba najkrótszy zapis aczkolwiek widząc co robią "golfiarze" to bym się bał ;-) )

Kod: Zaznacz cały

print "$_\n" foreach (@lista);
Awatar użytkownika
markossx
Beginner
Posty: 489
Rejestracja: 26 maja 2007, 16:01
Lokalizacja: Polska

Post autor: markossx »

Dzięki, dzięki @lessmian2
pzdr.
ODPOWIEDZ