1

fetchall_hashref を使用して、mysql DB から条件を満たすデータを取得しています。取得したデータはハッシュに格納され、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」が null の行を印刷したいのですが、「riskval」の値は 2 か所で 5 ですが、1 行だけが印刷されています。

selectall_hashref を selectall_arrayref に置き換えた後、パテに次のエラー メッセージが表示されました。

2 番目のエラー メッセージ

助けてください..

4

1 に答える 1

4

私は、値がmysql DBから取得され、配列のハッシュに格納されている私のような例を意味します

DBIのドキュメントによると、

$slice がハッシュ参照の場合、fetchall_arrayref各行をハッシュ参照としてフェッチします...

たとえば、すべての行のすべてのフィールドをハッシュ参照としてフェッチするには:

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

yourfetchall_hashrefをそれに置き換えると、重複した s を含むすべてのレコードをハッシュの配列として取得する必要がありますriskval

編集: OP がselectall_*ではなくを使用していることを見逃しましたfetchall_*。その場合、DBI ドキュメントの関連セクションは次のとおりです。

各行がハッシュとして格納されている行の配列を取得したい場合がよくあります。これは、次を使用して簡単に実行できます。

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