使用fetchall_hashref从DB获取所有数据

时间:2013-05-31 04:36:14

标签: perl cgi dbi hashref

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

我想检索3列的所有行并将其存储在哈希中但不能这样做。

表结构..

table structure table structure

表数据..

table data table data

正在使用的代码..

#!/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();

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

browser output

putty中的输出..

enter image description here

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

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

second error message

请帮助..

1 个答案:

答案 0 :(得分:1)

  

我的意思是一个与我们相似的例子   从mysql数据库中检索并存储在数组的散列中

根据the DBI documentation

  

如果$ slice是哈希引用,fetchall_arrayref将每行取为a   哈希引用...

     

例如,要将每行的所有字段作为哈希ref:

获取      

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

fetchall_hashref替换为riskval,您应该将所有记录作为哈希数组获取,包括重复selectall_*次的记录。

修改:我错过了OP正在使用fetchall_*而不是my $emps = $dbh->selectall_arrayref( "SELECT ename FROM emp ORDER BY ename", { Slice => {} } ); 。在这种情况下,DBI文档的相关部分是:

  

您可能经常需要获取存储每行的行数组   作为哈希。这可以通过以下方式简单地完成:

{{1}}