2

コマンド ラインの末尾に引数を追加し、MySQL データベースでその検索を実行してから、結果を一覧表示するか、何も見つからなかったと伝えようとしています。クエリ データをハッシュと配列の両方として保存することで、これを実行しようとしています (これらは演習です。私は PERL とスクリプト作成が非常に新しく、学習しようとしています)。ただし、ハッシュで同じことを行う方法がわかりません。SQL クエリを完了してから、While 関数を呼び出さないように、出力をハッシュに書き込みます。任意のガイダンスをいただければ幸いです。

#!/usr/bin/perl -w
use warnings;
use DBI;
use Getopt::Std;

&function1;
&function2;

if ($arrayvalue != 0) {
    print "No values found for '$search'"."\n"};

sub function1 {

getopt('s:');
$dbh = DBI->connect("dbi:mysql:dbname=database", "root", "password")
    or die $DBI::errstr;

$search = $opt_s;
$sql = $dbh->selectall_arrayref(SELECT Player from Players_Sport where Sport like '$search'")
or die $DBI::errstr;
@array = map { $_->[0] } @$sql;
$dbh->disconnect
    or warn "Disconnection failed": $DBI::errstr\n";

}

sub function2 {

@array;
$arrayvalue=();
print join("\n", @array, "\n");
if(scalar (@array) == 0) {
    $arrayvalue = -1
}
    else {$arrayvalue = 0;
};

}
4

2 に答える 2

3

にある DBI ドキュメントを参照して読んでくださいselectall_hashref。ハッシュへの参照のハッシュへの参照を返します。

使用構文:

$dbh->selectall_hashref($statement, $key_field[, \%attri][, @bind_values])

したがって、何が/どのように返されるかの例を次に示します。

my $dbh = DBI->connect($dsn, $user, $pw) or die $DBI::errstr;

my $href = $dbh->selectall_hashref(q/SELECT col1, col2, col3
                                     FROM table/, q/col1/);

返される構造は次のようになります。

{
  value1 => {
      col1 => 'value1',
      col2 => 'value2',
      col3 => 'value3'
  }
}

したがって、ハッシュ参照にアクセスするには、次のようにすることができます。

my $href = $dbh->selectall_hashref( q/SELECT Player FROM 
                                      Players_Sport/, q/Player/ );

# $_ is the value of Player
print "$_\n" for (keys %$href); 

次のようにするだけで、各ハッシュレコードに個別にアクセスできます。

$href->{$_}->{Player} 
于 2013-05-10T03:02:00.620 に答える
1

ドキュメントからの引用:

$sql = $dbh->selectall_hashef("SELECT Player from Players_Sport where Sport like ?", 'Players_Sport_pkey', $sport_like_value);
my %hash_of_sql = %{$sql};
于 2013-05-10T03:02:49.460 に答える