1

我正在使用 fetchall_hashref 从 mysql 数据库中获取满足条件的数据。检索到的数据将存储在哈希中,然后由 javascript 函数使用。

我想检索 3 列的所有行并将其存储在哈希中,但无法做到这一点。

表结构..

表结构 表结构

表数据..

表数据 表数据

正在使用的代码..

#!/usr/bin/perl -w
#print "Content-type: text/html\n\n";
use DBI;
use CGI;
use strict;
use warnings;
use diagnostics;
use Data::Dumper;

use CGI::Carp qw (fatalsToBrowser);
my $q = CGI->new;
print  $q->header;
my $dsn = "DBI:mysql:Demo:localhost";   # Data source name
my $username = "mint";                 # User name
my $password = "MINT123";              # Password
my $dbh;
my $sth;    
my $b;
my $c;  
        # Database and statement handles
 $dbh = DBI->connect($dsn, $username, $password);


 my $hash = $dbh->selectall_hashref("SELECT `desc`,date1,riskval from FIR2 where date1 between date_sub(now(),INTERVAL 1 WEEK) and now() order by date1", 'riskval');
 print Dumper($hash);
 $b=join(",",$hash);
 delete $_->{riskval} for values %$hash;

 $dbh->disconnect();

我在浏览器中得到的输出......

浏览器输出

腻子中的输出..

在此处输入图像描述

如您所见,我想打印“riskval”为空的行,“riskval”的值在 2 个位置为 5,但只打印了 1 行。

在我用 selectall_arrayref 替换 selectall_hashref 后,我在 putty 中收到以下错误消息。

第二条错误信息

请帮忙..

4

1 回答 1

4

我的意思是一个类似于我的示例,其中它们的值是从 mysql 数据库中检索并存储在数组的哈希中

根据DBI 文档

如果 $slice 是哈希引用,则将fetchall_arrayref每一行作为哈希引用获取...

例如,要获取每一行的所有字段作为哈希引用:

$tbl_ary_ref = $sth->fetchall_arrayref({});

用它替换你fetchall_hashref的,你应该将所有记录作为一个哈希数组,包括那些带有重复riskvals 的记录。

编辑:我错过了 OP 使用selectall_*而不是fetchall_*. 在这种情况下,DBI 文档的相关部分是:

您可能经常想要获取一个行数组,其中每一行都存储为一个哈希值。这可以通过以下方式简单完成:

my $emps = $dbh->selectall_arrayref(
    "SELECT ename FROM emp ORDER BY ename",
    { Slice => {} }
);
于 2013-05-31T09:52:18.140 回答