- 追加された行はこの色です。
- 削除された行はこの色です。
* 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で例外をキャッチする。
*** 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(*)を使う。