🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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

perl - wyciąganie danych z bazy

#52184
From: MaRc
Date: Thu, 10 Mar 2011 20:35
101 lines
3440 bytes
witam
męczę się nad wyciągnięciem danych z bazy danych.
mylą mi się fetchall_array, fetchall_arrayhref, fetchrow_array itd. które 
jest do czego i jak się do tego dobrać. Wybaczcie, ale po lekturze perldoc 
(nie jestem biegły w angielskim) za chorobe nie mogę tego zakumać. Jakby 
były tam przykłady użycia ze zwracanymi danymi było by łatwiej, a tak to 
się męczę.
mam taki krótki testowy skrypt:
----------
#!/usr/bin/perl

use DBI;
use Data::Dumper;

$dbase = DBI->connect("DBI:mysql:database=test;host=localhost","root","", 
{ RaiseError => 1 });
$dbase->do("SET NAMES utf8");

$sth = $dbase->prepare("SELECT id FROM users");	
$sth->execute;
$ile_wierszy = $sth->rows();
print "Pobrałem $ile_wierszy \n";

@users = $sth->fetchall_arrayref();

print "@users\n";
print Dumper(\@users);

$dbase->disconnect();

@tab = qw/a b c d e f g h/;
print Dumper(\@tab);

------------
uruchomienie tego skutkuje wyświetleniem:

/skrypty$ ./dane.pl
Pobrałem 11
ARRAY(0x9e30f48)
$VAR1 = [
           [
             [
               '1'
             ],
             [
               '2'
             ],
             [
               '4'
             ],
             [
               '5'
             ],
             [
               '6'
             ],
             [
               '7'
             ],
             [
               '8'
             ],
             [
               '9'
             ],
             [
               '10'
             ],
             [
               '11'
             ],
             [
               '12'
             ]
           ]
         ];
$VAR1 = [
           'a',
           'b',
           'c',
           'd',
           'e',
           'f',
           'g',
           'h'
         ];
---------
jak widać utworzona ręcznie tabela jest ok.

generalnie moje zapytanie zwraca same id, jedna kolumne w wierszu- zwraca 
liste. chcę te dane wepchnąć do tablicy @users.
jak użyłem fetchrow_array to perl krzyczy, że ma jeszcze nie pobrane dane 
z uchwytu. więc użyłem fetchall zeby pobrać wszystko i jak widać z dumpa 
po części działa bo jako tako dane są jakieś pobrane, ale nie w sposób w 
jaki ja bym chciał.
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.
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.
pomoże ktoś?
Technical Details
Message-ID: <ilbcmq$57j$1@pippin.nask.net.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!news.nask.pl!news.nask.org.pl!not-for-mail

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!news.onet.pl!news.nask.pl!news.nask.org.pl!not-for-mail
From: MaRc <marc@gmails.com>
Newsgroups: pl.comp.lang.perl
Subject: perl - wyciąganie danych z bazy
Date: Thu, 10 Mar 2011 21:35:34 +0100
Organization: NASK - www.nask.pl
Lines: 101
Message-ID: <ilbcmq$57j$1@pippin.nask.net.pl>
NNTP-Posting-Host: marcin.interdom.net.pl
Mime-Version: 1.0
X-Trace: pippin.nask.net.pl 1299789338 5363 193.59.36.199 (10 Mar 2011 20:35:38 GMT)
X-Complaints-To: abuse ATSIGN nask.pl
NNTP-Posting-Date: Thu, 10 Mar 2011 20:35:38 +0000 (UTC)
User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.14) Gecko/20110223 Thunderbird/3.1.8
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit