[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