【问题标题】:Saving the output of a Perl SQL query to a hash instead of an array将 Perl SQL 查询的输出保存到散列而不是数组
【发布时间】:2013-05-10 02:45:54
【问题描述】:

我正在尝试在命令行末尾添加一个参数,通过 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;
};

}

【问题讨论】:

    标签: mysql perl


    【解决方案1】:

    请参阅并阅读selectall_hashref 上的 DBI 文档。它返回对哈希引用的哈希引用。

    使用语法

    $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} 
    

    【讨论】:

      【解决方案2】:

      抄袭documentation:

      $sql = $dbh->selectall_hashef("SELECT Player from Players_Sport where Sport like ?", 'Players_Sport_pkey', $sport_like_value);
      my %hash_of_sql = %{$sql};
      

      【讨论】:

        猜你喜欢
        • 2016-07-29
        • 2016-07-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多