2013-05-31 2 views
-1

Я использую fetchall_hashref для получения данных, удовлетворяющих условию из DB mysql. Полученные данные будут сохранены в хеше, а затем будут использованы futhur с помощью функции javascript.Получить все данные из БД с помощью fetchall_hashref

Я хочу получить все строки из 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

выход в шпатлевкой ..

enter image description here

Как вы можете видеть, что я хочу, чтобы напечатать строку, где «riskval "имеет значение null, значение" riskval "равно 5 в 2 местах, но печатается только одна строка.

после того, как я заменил selectall_hashref с помощью selectall_arrayref, я получил следующее e rror сообщение замазкой ..

second error message

Пожалуйста, помогите ..

+1

хэш не может иметь несколько одинаковых ключей, так что вам придется изменить подход с использованием хэш-массивов или что-то подобное. –

+0

Можете ли вы привести пример ??? – Lucy

+0

уверен, http://perldoc.perl.org/perldsc.html#Declaration-of-a-HASH-OF-ARRAYS –

ответ

1

я имею в виду пример, похожий на мой, где они значения в настоящее время извлекаются из БД MySQL и хранится в хэш-массивов

Согласно the DBI documentation,

Если $ ломтика хэш ссылки, fetchall_arrayref извлекает каждую строку в качестве эталона хэш ...

Например, для извлечения всех полей каждой строки в качестве хэш-исх:

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

Замените свой fetchall_hashref на это, и вы должны получить все записи в виде массива хэшей, в том числе с дубликатом riskval.

Редактировать: Я пропустил, что ОП использует selectall_*, а не fetchall_*.В этом случае соответствующий раздел документации DBI является:

Вы можете часто хотите получать массив строк, где каждая строка хранится как хэш. Это может быть сделано просто с помощью:

my $emps = $dbh->selectall_arrayref(
    "SELECT ename FROM emp ORDER BY ename", 
    { Slice => {} } 
); 
+0

Я заменил «fetchall_hashref» на «fetchall_arrayref» и получил сообщение об ошибке в putty, как указано выше во втором изображении ... – Lucy

+0

Снова просмотрите документацию. Их пример использования 'selectall_arrayref' для получения массива хэшей:' my $ emps = $ dbh-> selectall_arrayref ( "SELECT ename FROM emp ORDER BY ename", {Slice => {}} ); что единственными параметрами являются запрос и '{Slice => {}}'. –

Смежные вопросы