2010-12-03 8 views
4

は、ここで私が働いているSQLiteのデータベースアプリケーションからのコードの抜粋です:PerlのSQLite3:{名前}が機能していませんか?

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

が失敗します。 {名前}は、私が期待していた配列参照を返すことはありません。もし私がdie節を出すと、それはうまく動作します(当然$ namesを使用しているところでは、予期しない "使用している初期化されていない値"警告を投げます)。

質問がうまくいっていれば{NAME}が立ち上がらないという明白な理由はありますか?

ありがとうございます!

+0

文のオブジェクトの "NAME"属性が何をしているのかを教えてください。一見すると、DBI PODまたはソースのいずれかから直接回答を得ることができませんでした。列名の配列参照ですか? +1 QとAの両方に対して+1 – DVK

+0

fetchall_arrayrefの後でNAMEを使用できない理由は、フェッチされたすべての行がアクティブになっても、その文がアクティブでなくなったためです。 – bohica

答えて

5

私の一部で大きな時間の骨折したミス。 2行切り替えて

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

修正します。私はexecute()の後で(あるいは$ sthが変更される前に){NAME}を直接取得しなければならないと思います。 {名前}を消去するためにfetchall_arrayrefは期待していませんでした。

今すぐダウンロード!投稿して申し訳ありません。私は誰かがそれがスペースの価値がないと判断するまで、後世のためにこれを残します。 :-)

+0

正解を見つけたので、すぐに受け入れてください。 – ysth

関連する問題