くまきち

山と旅と家族が大事。
でも激しい物欲が理性と財布のタガを飛ばす
最近は自転車も乗ってる

[PHP][PostgreSQL] クエリ結果リソースの巻き戻し

2013-01-23 23:32:55 | SEまわり
久しぶりに CakePHP でなく、PHP から生で(?) POstgreSQL に接続&クエリ実行をしようとしている。


接続やクエリ発行、結果のHTML出力を問題なく実装していったが、ひとつつまづいた。

あるクエリ結果が格納されたリソースに対し、一度 pg_fetch_row($res) を実行すると、イテレータが次のレコードに進む。 while でこれを回すと最後まで進む。

だから、次に同じリソースにアクセスすると「次の結果はないよ」という状態になる。

pg_fetch_row() の第2引数に0を指定すれば先頭を指示できるが、それだとループを回すには都合が悪い(while でこれをやると無限ループになる)。


以前こうやって直接書いてたときには、pg_rewind() とかいうイテレータ移動用の関数があったように思うが、今はマニュアルに見当たらない。

pg_* 関数リストを見てると、pg_result_seek() というのが、イテレータ位置を任意に指定できるらしい。

ということで、pg_result_seek($res, 0) としてやれば、結果リソースをまた先頭から読み直すことが出来た。


たまにはコード書かないとな。


しかし、pg_rewind() ってなかったっけかなあ。。。勝手に脳内で作ってたのかな。

最新の画像もっと見る