Вот фрагмент кода из SQLite базы данных приложения Я работаю над:Perl's SQLite3: {NAME} не работает?
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
}
}
Запрос выстреливает просто отлично, а на самом деле она возвращает правильные результаты. Однако по какой-то причине эта линия,
my $names = $sth->{NAME} or die "Name failed: $DBI::errstr";
Не удалось. {NAME} никогда не возвращает массив, который я ожидал бы. Если я беру предложение die die, он работает отлично (бросая ожидаемое «использование неинициализированных значений» предупреждение, где бы я не использовал $ names, конечно).
Есть ли какая-то очевидная причина, по которой мне не хватает, что {NAME} не срабатывает, учитывая, что запрос работал нормально?
Спасибо!
В то же время, не могли бы вы прояснить для значения образования без инициации, что делает атрибут «ИМЯ» объекта утверждения? Я не мог получить прямой ответ из DBI POD или источника с первого взгляда. Является ли ссылка массива для имен столбцов? +1 для обоих Q и A – DVK 2010-12-04 01:27:39
Причина NAME недоступна после того, как fetchall_arrayref - это то, что оператор больше не активен после того, как все строки извлечены. – bohica 2012-05-01 07:25:51