2010-12-03 96 views
4

這裏的代碼SQLite數據庫應用程序的一個片段我工作:Perl的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}永遠不會返回我期望的arrayref。如果我拿出die子句,它運行良好(當然,無論我在哪裏使用$名稱,都會拋出期望的「使用未初始化值」警告)。

是否有一些明顯的原因,我錯過了{NAME}不會觸發,因爲查詢工作得很好?

謝謝!

+0

雖然在此,請您澄清未啓動的語句對象的「NAME」屬性的教育價值是什麼?乍看之下,我無法從DBI POD或源中獲得直接的答案。它是列名的數組引用嗎?對於Q和A都爲+1 – DVK 2010-12-04 01:27:39

+0

在fetchall_arrayref之後NAME不可用的原因是一旦獲取所有行後語句不再處於活動狀態。 – bohica 2012-05-01 07:25:51

回答

5

在我這一部分的大時間骨頭錯誤。切換兩條線,使其成爲

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

修復它。我想我必須在execute()之後直接抓取{NAME}(或者在$ sth更改之前)。我不希望fetchall_arrayref擦除{NAME}。

現在工作!對這篇文章感到抱歉。我會留下這個後代,直到有人認爲它不值得這個空間。 :-)