[PHP-users 10421] Re: pg_fetch_objectのエラー [解決]
Genshirou Taki
php-users@php.gr.jp
Mon, 30 Sep 2002 12:45:28 +0900
自己レスです。
問題のwhileループのなかで、SQLを実行する部分があり、
そこが グローバル変数の $resultを書き換えてしまい、
2回目のループに来たときにエラーが出ることがわかりました。
データベースの接続、SQLの実行といった提携処理を
まとめようと関数を自作したのですが、
その中身がまずかったようです。
とりあえず、whileの中ではSQLをつくり、配列に代入するだけにして、
whileを抜けてから改めて、while内で行いたかった処理を実行させることで、
逃げることができました。
ところで皆さんはデータベースの接続や、SQLの実行などは
コードの随所に直接埋め込んでいるのでしょうか?
毎回pg_connect()を書いたり、エラーとラップを埋め込むのがわずらわしく、
自作したのですが、良いサンプルなどありましたらお教えください。
On Mon, 30 Sep 2002 12:29:27 +0900
Genshirou Taki <g_taki@max-corporation.com> wrote:
> g_takiといいます。
>
> Postgres 7.2.2
> GCC 3.2
> Solaris8(IA)
> PHP-4.2.2
> で使用しています。
>
> $numrow = pg_numrows($result)
> の数だけ、pg_fetch_object($result,$i)を実行したいのですが、
> 1回しか実行できません。
>
>
> 現象:
>
> 以下のようなテーブルにおいて、
>
> create table cart_box(
> session_id text,
> item_id integer,
> counter integer,
> total integer,
> primary key(session_id, item_id)
> );
>
>
> 以下のような処理を実行させました
>
> $sql = "SELECT * FROM cart_box WHERE session_id='".$PHPSESSID."' ORDER BY item_id";
> $result = execsql($sql); //グローバル変数としてresource を返す自作関数
> $numrow = pg_numrows($result);
> //ここで$numrowは上記SELECTで得られる行数が返ってくることを確認済み
> $i=0;
> while($data = pg_fetch_object($result,$i)){
> //処理
> $i++;
> }
>
> しかし、このループは一回しか廻ってくれません。
> 2回目に入った時点で以下のような警告がでてしまいます。
> Warning: Unable to jump to row 1 on PostgreSQL result index 9
>
> pg_fetch_objectのマニュアルを見ると、2番目の引数はオプションになるよう
> なので、
> while($data = pg_fetch_object($result)){
> としましたが、警告が表示されないだけで、結果は変わりませんでした。
>
>
>
>
> 同じような処理を他でも行っているのですが、
> pg_fetch_object()でのエラーは出たことが無く、
> 原因がわかりません。
>
> 怪しいと疑う点などアドバイスいただけないでしょうか?
>
>
> _______________________________________________
> PHP-users mailing list
> PHP-users@php.gr.jp
> http://ns1.php.gr.jp/mailman/listinfo/php-users