0

私はこれに16時間続けて苦労してきました、そして私は私の知恵の終わりにいます。私はすべてのマンページを読み、自分で作成しようとし、いくつかの例を試し、多くを変更して無駄にしました。

私がやりたいのは、DBからいくつかの行を取得し、各行の変数(列データ)に個別にアクセスできるようにすることです。

 #!/usr/bin/perl -w
    use strict;
    use CGI;
    use CGI ':standard';
    use CGI::Carp qw(fatalsToBrowser warningsToBrowser);
    print CGI::header(-expires => '-1d');
    use DBI;
    $|=1;

use vars qw($getstate $hookup $query $results $city $state $pages $category $lastupdate $progress $actual $city1 $state1 $pages1 $category1 $lastupdate1 $progress1 $actual1);


    $getstate = 'Arizona'; ## actually comes in from a query

    ##$hookup is returned from a sub with database credentials
   $query = $hookup->prepare(qq{SELECT `city`,`state`,`pages`,`category`,`lastupdate`,`progress`,`actual` FROM `statesettings` WHERE `pages` > `progress` AND `state` LIKE ? ORDER BY `lastupdate` ASC LIMIT 2}); 
    $query->bind_param(1, "%$getstate%");
    $query->execute() or die "Query did not execute";

    ## I HAVE TRIED all kinds of ways to fetch data! fetchall_arrayref() fetchrow_array() and dozens upon dozens of attempts.

    while ($results = $query->fetchrow_hashref) {
    $city = $results->{city};
    $pages = $results->{pages};
    $category = $results->{category};
    $lastupdate = $results->{lastupdate};
    $progress = $results->{progress};
    $actual = $results->{actual};
    #####################
    }## end WHILE
    $query->finish;
    $hookup->disconnect;

たとえば、上記では、1つの行にアクセスする方法しかわかりません。

しかし、私は次のようなものが必要です:(明らかに私が要求した行数に設定されています)

$city = $arr[0]['city']; #city from row 0
$city1 = $arr[1]['city']; #city from row 1

または、さらに使用するために各行の列データを個別に取得できるようにします。

私が書いた巨大なコードで実際に成功しました。このコードは、すべてのデータを「:」で配列にプッシュし、後で分割した行を分割して、それぞれをループしました。最も可能性の高いコードで私の結果を得る方法の良い例でした。私がやりたいのは「ビルトイン」であることは知っていますが、私には頭脳の力がありません。何時間も経ってもこれがわからないという点で、完全に脳死しているように感じます。近すぎて見えない?

サンプルコードと一緒に少し説明したいので、メカニズムを学び/理解することができます。ご指導ありがとうございます...

4

2 に答える 2

3

あなたは書ける:

my @arr;
while ($results = $query->fetchrow_hashref)
{
  push @arr, $results;
}
$query->finish;
$hookup->disconnect;

次に、必要な他の割り当てを実行します。

my $city = $arr[0]->{'city'}; # city from first row
my $city1 = $arr[1]->{'city'}; # city from second row

また:

my @all_cities = map { $_->{'city'} } @arr;

my $city = $all_cities[0]; # city from first row
my $city1 = $all_cities[1]; # city from second row
于 2012-10-26T13:52:26.987 に答える
0

あなたはほとんどそこにいます。

my $res_arrayref;
while ($results = $query->fetchrow_hashref) {
... your code...
push @{$res_arrayref}, $result;
}    

...later...
$res_arrayref->[0]->{city};
于 2012-10-26T13:52:30.497 に答える