[PHP-users 10639] Re: pear DBオブジェクトのセッションでの受け渡し

Masashi Shinbara php-users@php.gr.jp
Tue, 08 Oct 2002 14:30:57 +0900


新原です。

> 試してみました。
> 
> Warning: pg_errormessage(): supplied argument is not a valid PostgreSQL
> link resource in /usr/local/lib/php/DB/pgsql.php on line 412
> 
> という警告は出ますが、print_r()で確認したところ、問題はないようです
DBクラスを使用したその後の動作も正常に動作していますでしょうか。
おそらくリソースが取得できずにpg_errormessage()に辿り着き、
上記メッセージが表示されているのだと思います。

> > ただこうするとDBが変わった場合にDSNだけでなく、require_once()も
> > 書き換えないといけないのでイマイチかもしれませんね。
> 
> という問題の他に、そもそもpear DBを使用する目的が「DBがなんであるかは
> できるだけ意識したくない」というものですから、そこら辺が(個人的には)
> 問題になってしまいます。
> せっかくアドバイスを頂きましたのに申し訳ありません。
いえいえ。
私の例はこういう方法もありますよ、という事だけですから、お気になさらずに。
(私も松井さんのご意見に賛成です)

> また、そういったDBオブジェクトをメンバとして持つ、オブジェクトが
> 複数ある場合、必要に応じて、それぞれのオブジェクトで別々のDBにアクセスする
> こともできるので、DBの分散もできるかなとも考えました。
単に各クラスごとに接続するDBを切り替えたいのであれば、
DSNだけを保持しておけば良いと思いますが、いかがでしょうか。


伊藤さんがご提示された
> 問題は、内部で持つDBのコネクションの維持の方法ですが、特殊関数__sleep,__wakeup
> などを使ってコネクションの解放と接続をうまく作ればなんとかなるような気
がします。
の__wakeup関数内でDB:connect()を呼べば、リソースは取得できますが、
セッションではdb_pgsqlクラスのインスタンスを保持しているので、
おそらくsession_start()の前にクラスの定義が必要なのではないでしょうか。


私の意見としては、DBなどシステム上の共有リソースは特定のクラスに
依存させるより、システム内で共有できるように実装する方が
望ましいと思います。


---------------------------------------------- 
「1×1」 http://www.1x1.jp/
 + Masashi Shinbara <shin@1x1.jp>