2 votes

Récupération des lignes de la base de données sous forme de hashmap

Je suis nouveau en Perl (principalement en PHP), et je me demande si je peux récupérer des lignes de base de données en utilisant DBI d'une manière similaire à celle de PHP. Il s'agit d'un tableau contenant des hashs, avec le nom du hash comme nom de colonne de la base de données, par exemple quelque chose comme :

[0] -> {
    'firstname' -> 'mark',
    'surname' -> 'smith'
},
[1] -> {
    'firstname' -> 'fred',
    'surname' -> 'baker'
},
....

J'ai essayé :

    my $ref = $stmt_datahub->fetchall_arrayref;
    print(Dumper($ref));

Mais cela ne permet pas de nommer les colonnes, c'est-à-dire que cela renvoie :

['mark', 'smith'], ['fred', 'baker']

etc.

Et fetchall_hashref il semble qu'il faille fournir une clé primaire pour indexer les hachages, ce que je n'ai pas toujours, donc je préférerais qu'il produise simplement un tableau.

C'est possible ?

3voto

plusplus Points 1625

Vous avez besoin de fetchall_arrayref, mais avec un argument. Ceci retourne un tableau de hashrefs :

my $results_arrayref = $dbh->fetchall_arrayref( {} );

Vous pouvez également choisir de n'inclure que certaines colonnes dans le hashref - voir la documentation pour plus de détails :

https://metacpan.org/module/DBI#fetchall_arrayref

Pour plus de clarté, vous devriez probablement écrire cette structure de données d'une manière plus proche de Perl - vous n'incluriez pas les indices de tableau (0, 1, etc.) lorsque vous documentez une liste/un tableau/une référence de tableau en Perl (PHP brouille un peu les choses avec ses tableaux associatifs).

[ {
   firstname => 'mark',
   surname   => 'smith',
  },
  {
   firstname => 'fred',
   surname   => 'baker',
  },
  ...
],

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X