久しぶりに 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() ってなかったっけかなあ。。。勝手に脳内で作ってたのかな。
接続やクエリ発行、結果の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() ってなかったっけかなあ。。。勝手に脳内で作ってたのかな。