Perl SQLite3: {NAME} не работает? - PullRequest
4 голосов
/ 03 декабря 2010

Вот фрагмент кода из приложения базы данных sqlite, над которым я работаю:

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";

Fails.{NAME} никогда не возвращает ожидаемый массив.Если я вычеркну предложение die, оно будет работать нормально (конечно, выбрасывая ожидаемое предупреждение об использовании неинициализированных значений везде, где я использую $ names).

Есть ли какая-то очевидная причина, по которой я скучаю,NAME} не сработает, учитывая, что запрос работал нормально?

Спасибо!

1 Ответ

5 голосов
/ 03 декабря 2010

Большая ошибка с моей стороны. Переключение двух линий так, чтобы это

my $names ...
my $result ...

Исправляет это. Я предполагаю, что мне нужно получить {NAME} сразу после execute () (точнее, до изменения $ sth). Я не ожидал, что fetchall_arrayref сотрет {NAME}.

Работает сейчас! Извините за пост. Я оставлю это для потомков, пока кто-то не решит, что это не стоит места. : -)

...