網頁

2011年9月30日 星期五

Perl: DBI 查詢 use fetchrow_hashref

今天遇到了一個現象,讓我花了好多時間,最後才查清楚怎麼回事,手動查詢資料庫,明明 table 內有資料,程式用 fetchrow_hashref 查詢就是沒資料....
my $ref = $sth->fetchrow_hashref();
print "name=$ref->{'NAME'}, address=$ref->{'ADDR'}\n";
執行結果:
name=, address=

會造成這樣的原因是因為大部分的資料庫,資料表的欄位名稱不分大小寫,而 perl 的 hash ,其 key 的部分是區分大小寫的,在這情況下會帶來不小的困擾,造成上面語法無法取得資料。
為了避免潛在大小寫不匹配的問題,必須透過 NAME_uc 或 NAME_lc 屬性來告知 fetchrow_hashref 強制欄位名稱為大寫或小寫。
my $ref = $sth->fetchrow_hashref('NAME_lc);    # use lowercase names
or
my $ref = $sth->fetchrow_hashref('NAME_uc);    # use uppercase names
perl 使用 DBI 來查詢資料庫資料,有好幾種函數可以使用,雖然這邊使用 fetchrow_hashref ,但他並不是最好的選擇,因為它的效率沒有像 fetchrow_array 或 fetchrow_arrayref 那麼好。

沒有留言:

張貼留言