🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.perl
Article #52185

Re: perl - wyciąganie danych z bazy

#52185
From: Adam Osuchowski
Date: Thu, 10 Mar 2011 22:26
41 lines
2642 bytes
MaRc wrote:
> @users = $sth->fetchall_arrayref();

fetchall_arrayref zwraca referencję czyli skalar, więc w zasadzie powinno
być $users, a nie @users, ale patrz równiez na uwagę niżej.

> wiem, można to zrobić w while i pushem wpychać kolejne wyniki do tabeli, 
> ale nie o to chodzi. chcę to zrobić w jednym zapytaniu i co najważniejsze w 
> końcu opanować te wszystkie fetch'e.

Można i przez while, ale map będzie bardziej zwięzły:

@users = map { $_->[0] } @{$sth->fetchall_arrayref()};

W tej postaci już musi być @users bo zwracamy tablicę, a nie referencję
do niej.

> będzie ktoś tak dobry i po krótce opisze mi te fetche, kiedy ich używać i 
> jak się dostać do tych pobranych danych. z góry wielkie dzięki.

Nazewnictwo jest dość logiczne:

fetchall_* -- zwracją wszystkie wiersze.
fetchrow_* -- zwracają jeden (kolejny) wiersz.
*_arrayref -- zwracają referencję do tablicy
*_hashref -- zwracają referencję do hasza

fetchall_arrayref dodatkowo posiada drugi parametr określający czy każdy
z wierszy ma być zapisany jako hash (wraz z polami, które należy
wyciągnąć) czy jako tablica (wraz z kolejnością pól). fetchall_hashref
ma parametr określający które pole ma być kluczem w zwracanym haszu.

Najlepiej będzie jak sobie uruchomisz po kolei każdą z metod i zobaczysz
Dumperem co dokładnie zwraca, bo szybki rzut oka na taki wynik da Ci
więcej informacji niż suchy opis z dokumentacji.

Zainteresuj się też metodami selectall_*, selectrow_* i selectcol_*.
Dla statycznych zapytań (tzn. takich, gdzie nie ma bindowania parametrów,
czyli jest stała treść zapytania) te metody w zasadzie sprowadzają się do
prepare() + execute() w jednym wywołaniu. Nazewnictwo jest podobne, choć
są różnice w szczegółach działania względem metod fetch*().
Technical Details
Message-ID: <20110310222645.6b8b4567@polsl.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!polsl.pl!not-for-mail
References: <ilbcmq$57j$1@pippin.nask.net.pl>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!polsl.pl!not-for-mail
From: Adam Osuchowski <someone@somewhere.com>
Newsgroups: pl.comp.lang.perl
Subject: Re: perl - wyciąganie danych z bazy
Date: Thu, 10 Mar 2011 22:26:45 +0000 (UTC)
Organization: Politechnika Slaska, Gliwice
Lines: 41
Message-ID: <20110310222645.6b8b4567@polsl.pl>
References: <ilbcmq$57j$1@pippin.nask.net.pl>
NNTP-Posting-Host: hydra.ck.polsl.pl
Mime-Version: 1.0
X-Trace: polsl.pl 1299796005 5997 157.158.1.11 (10 Mar 2011 22:26:45 GMT)
X-Complaints-To: news@polsl.pl
NNTP-Posting-Date: Thu, 10 Mar 2011 22:26:45 +0000 (UTC)
In-Reply-To: <ilbcmq$57j$1@pippin.nask.net.pl>
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit