Article View: pl.comp.lang.perl
Article #52185Re: perl - wyciąganie danych z bazy
From: Adam Osuchowski
Date: Thu, 10 Mar 2011 22:26
Date: Thu, 10 Mar 2011 22:26
41 lines
2642 bytes
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-mailReferences:
<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