Voici un extrait de code d'une application de base de données SQLite Je travaille sur:SQLite3 de Perl: {NAME} ne fonctionne pas?
my $query = "select * from pins";
my $sth = $dbh->prepare($query) or die "Couldn't prep: $DBI::errstr";
$sth->execute or die "Exec problem: $DBI::errstr";
my $result = $sth->fetchall_arrayref();
my $names = $sth->{NAME} or die "Name failed: $DBI::errstr";
foreach my $row (@$res) {
# ... do some row-specific things
foreach my $cell (@$row) {
# ... do some cell-specific things
}
}
La requête se déclenche de très bien, et en fait, il renvoie les résultats corrects. Cependant, pour quelque raison que ce soit, cette ligne
my $names = $sth->{NAME} or die "Name failed: $DBI::errstr";
Echoue. {NAME} ne retourne jamais le arrayref auquel je m'attendais. Si je supprime la clause die, elle fonctionne correctement (en lançant l'avertissement "using uncinitialized values" prévu partout où j'utilise des noms $, bien sûr).
Y a-t-il une raison évidente qui me manque pour que {NAME} ne se déclenche pas, étant donné que la requête a bien fonctionné?
Merci!
Alors que là, pourriez-vous s'il vous plaît préciser pour la valeur éducative de non-initié ce que l'attribut "NAME" de l'objet de déclaration fait? Je ne pouvais pas obtenir une réponse directe de DBI POD ou de la source à première vue. Est-ce une référence de tableau pour les noms de colonnes? +1 pour Q et A – DVK
La raison pour laquelle NAME n'est pas disponible après fetchall_arrayref est que l'instruction n'est plus active une fois que toutes les lignes ont été récupérées. – bohica