Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: разработка для Web > ARRAY


Автор: MoXxX 24.9.2007, 23:44
Посылаю запрос к БД и тутже вывожу значение переменной @query:
Код

my @query = $db_->get_gamers_where("name=$login");
print @query;

в классе используется следущая ф-ция для обработки команды:
Код

    my $self = shift;
    my $attr = $AUTOLOAD;
    $attr =~ s/.*:://;
    return unless $attr =~ /[^A-Z]/;
    my ( $q, $table, $where ) = split('_', $attr);
    if (( $q eq 'get' ) && ( $where ne 'where' )) {
        if ( @_ ) {
            my $args = shift;
            my %ReturnHash = ();
            $dbh = DBI->connect( "DBI:mysql:" . Data::config()->{DB_NAME},
                                    Data::config()->{DB_LOGIN},
                                    Data::config()->{DB_PASS} )
                      or die DBI->errstr;
            my $end = scalar( @{ $args } );
            for( my $i=0; $i<$end; $i++ ) {
                my $col = $args->[$i];
                my $sth = $dbh->prepare( "SELECT $col FROM $table" );
                $sth->execute;
                while ( my $ref = $sth->fetchrow_hashref ) {
                    push @{ $col }, $ref->{ $col };
                }
                $ReturnHash{ $col } = \@{ $col };
            }
            return \%ReturnHash;
        }
    }

    if (( $q eq 'get' ) && ( $where eq 'where' )) {
        if ( @_ ) {
            my $expr = shift;
            $dbh = DBI->connect( "DBI:mysql:" . Data::config()->{DB_NAME},
                                    Data::config()->{DB_LOGIN},
                                    Data::config()->{DB_PASS} )
                      or die DBI->errstr;
            my $sth = $dbh->prepare( "SELECT * FROM $table WHERE $expr" );
            $sth->execute;
            #while ( my $ref = $sth->fetchrow_array ){
            while ( my $ref = $sth->fetchrow_hashref() ) {
                push @ary, $ref;
            }
            return \@ary;
       }
    }


в значении переменной @query выводится ARRAY(0x1a8c4dc)
Вопрос - как мне получить запрашиваемые данные из таблицы?

Автор: korob2001 25.9.2007, 00:46
Метод возвращает ссылку на массив, а не реальный массив. Вобщем попробуй разыменовать её:
Код

my $query = $db_->get_gamers_where("name=$login");
print @$query;

Хотя теперь ты наверное увидешь что-то в этом роде:
HASH(0x1a8c4dc)HASH(0x1a7d4cc)HASH(0x1d8d2dc)HASH(0x2a5c4dc)HASH(0x6a8dcdc)
так как массив заполняется ссылками на хеши, вот здесь:
Код

           #while ( my $ref = $sth->fetchrow_array ){
            while ( my $ref = $sth->fetchrow_hashref() ) {
                push @ary, $ref;
            }

их тоже нужно будет разименовать, либо раскоментировать while, где выборка направляется в массив и соответсвенно закоментировать второй while:
Код

            while ( my $ref = $sth->fetchrow_array ){
            #while ( my $ref = $sth->fetchrow_hashref() ) {
                push @ary, $ref;
            }

Автор: MoXxX 25.9.2007, 17:23
Написал - нечего не выводит, тоесть переменная - пустая :\\\

P.S. Соединение с БД есть (вставка ряда работает)

Автор: djkostya 17.10.2007, 14:25
use Data::Dumper;
print Dumper(@array);



Чтоб посмотреть что внутри....

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)