Возвращение результатов MySQL в виде хеш-таблиц в Perl - PullRequest
4 голосов
/ 17 октября 2011

В Perl я делаю SQL-запрос, похожий на следующий:

SELECT `id`, `title`, `price` FROM `gamelist`

Что я хочу сделать, это взять результат этого запроса и вывести его в хеш-таблицу. Я использую DBI и в настоящее время знаю, как сделать следующее:

my %results;
my $count = 0;
while( @result = $statement->fetchrow() ){
    %results{'id'}[$count] = $result[0];
    %results{'title'}[$count] = $result[1];
    %results{'price'}[$count] = $result[2];
    $count++;
}

Однако я не люблю использовать $result[0] и полагать, что первое поле будет идентификатором. Я бы предпочел что-то вроде:

my %results;
my $count = 0;
while( %result = $statement->fetchrow_as_hashtable() ){
    %results{'id'}[$count] = %result{'id'};
    %results{'title'}[$count] = %result{'title'};
    %results{'price'}[$count] = %result{'price'};
    $count++;
}

Я попытался посмотреть в Google, но не смог найти много хороших ответов, встроенных в DBI / Perl. Я нашел класс с открытым исходным кодом, который предлагал эту функциональность, но я чувствую, что это возможно без использования чужого класса.

Ответы [ 3 ]

9 голосов
/ 17 октября 2011

А как насчет fetchrow_hashref?

5 голосов
/ 17 октября 2011
while (my $result = $statement->fetchrow_hashref) {
        print $result->{id};
        print $result->{title};
        print $result->{price};
}

Используйте fetchrow_hashref, чтобы получить результат непосредственно в хэше

4 голосов
/ 17 октября 2011

Обратитесь к документации DBI для использования selectall_arrayref:

 $rows = $dbh->selectall_arrayref($query, {Slice=>{}}, @params)

$rows - массив хешей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...