我正在使用fetchall_hashref从mysql DB获取满足条件的数据。检索到的数据将存储在哈希中,然后通过javascript函数使用futhur。
我想检索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();
我在浏览器中获得的输出......
putty中的输出..
如您所见,我想要打印“riskval”为空的行,“riskval”的值在2个位置为5,但只打印了1行..
用selectall_arrayref替换selectall_hashref后,我在putty中收到以下错误信息..
请帮助..
答案 0 :(得分:1)
我的意思是一个与我们相似的例子 从mysql数据库中检索并存储在数组的散列中
如果$ 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}}