• 追加された行はこの色です。
  • 削除された行はこの色です。

* SELECT [#ae945703]

 $sql = 'select num, str from t1 where num > ?';
 $sth = $dbh->prepare($sql);
 $sth->execute(2);
 while ($row = $sth->fetchrow_hashref()){
     print $row->{num},"\n";
     print $row->{str},"\n";
 }
 die $sth->errstr if $sth->err;
-fetchrow_xxx()が途中でエラーを起こした場合、返値がundefなためwhile()ループを抜ける。
-全行走査できたのかエラーだったのか調べるためには、
-$sth->errを使うか、
-RaiseErrorで例外をキャッチする。

*** 全行をハッシュの配列で取得 [#w3f9898d]
 $dbh->selectall_arrayref('SELECT * FROM user ORDER BY id',{Columns=>{}});
詳しくは、http://blog.scrapcode.net/article/598613.html

*** 1行ずつ取得 [#h9940962]
 @row_ary  = $sth->fetchrow_array; 
 $ary_ref  = $sth->fetchrow_arrayref; # $sth->fetchと書いても同じ
 $hash_ref = $sth->fetchrow_hashref;  # fetchrow_hashref('NAME_uc')とするとカラム名が大文字になる
*** まとめて取得 [#n71b4de7]
 $ary_ref = $sth->fetchall_arrayref;
 $ary_ref = $sth->fetchall_arrayref([0]);                # 各行の先頭のカラムだけ取り出す
 $ary_ref = $sth->fetchall_arrayref([-2,-1]);            # 各行の一番後ろとその直前の列
 $ary_ref = $sth->fetchall_arrayref({});                 # 各行をハッシュリファレンスとして取り出す
 $ary_ref = $sth->fetchall_arrayref({ foo=>1, bar=>1 }); # 各行のfooとbarというカラムだけ

*** プライマリキーをハッシュのキーにして取得 [#wa293720]
 $sth = $dbh->prepare("SELECT id, name FROM table");
 $sth->execute;
 $hash_ref = $sth->fetchall_hashref('id');
 print "Name for id 42 is $hash_ref->{42}->{name}\n";

 $sth = $dbh->prepare("SELECT foo, bar, baz FROM table");
 $sth->execute;
 $hash_ref = $sth->fetchall_hashref( [ qw(foo bar) ] );
 print "For foo 42 and bar 38, baz is $hash_ref->{42}->{38}->{baz}\n";

*** prepare()とexecute()とfetchXXX()をまとめて行う [#jd525776]
 $ref = $dbh->selectrow_array($sql,undef,(3));         # (3)はプレースホルダに渡す値
 $rows = $dbh->selectall_arrayref($sql, {Slice => {}});
 $ref = $dbh->selectall_hashref($sql,'num',undef,(3));

*** 高速なSELECT [#v77e0889]
fetchrow_arrayrefとbind_columnsを使う。

 $sth->bind_columns(\($num, $str));
 while ($row = $sth->fetchrow_arrayref){
     print "$num,$str\n";
 }

*** 影響した行数 [#jacd6b3d]
$sth->rowsはすべてfetchし終わった後しか使えない。よって、あらかじめ行数を得るにはSELECT COUNT(*)を使う。


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS