[PHP-users 4590] Re: ラージオブジェクト登録

AKUNE Yutaka php-users@php.gr.jp
Tue, 08 Jan 2002 17:04:32 +0900


阿久根です。今年もよろしくお願いします。


On Tue, 08 Jan 2002 16:32:53 +0900
GUU <guu_ml@reguler-c.com> wrote:

> -----------------------------------------------------
> 	pg_exec ($con, "begin");
> 	$result=pg_exec($con,$sql);
> 
> 	if($ary[kiji_gazou]!="none"){
> 		$fn=fncCopyFile($ary[kiji_gazou]);
> 		pg_loimport($fn);
> 
> 	}
> 	
> 	pg_exec ($con, "commit");
> -----------------------------------------------------
> $sqlは、既に単独でインサート成功しているSQL文が入っています
---[ 略 ]---
> このコード実行に関してはエラーは発生しなかったのですが、ODBC接続でACCESS
> からカラムを見ても、何も入っていませんでした。psqlでも同様でした。
> データが登録されたことを確認する手段が、間違っているのでしょうか?
> そもそもフィールドをどうやって指定するのでしょうか?(まったくやり方が違っ
> ている気もしますが・・・^^;;)

この $sql が何をしているのか、みているのはどのカラムかも分かりませんが・
・・

ラージオブジェクトを格納しても、その格納したオブジェクトの ID を取得して
おかないと意味がありません。pg_loimport() の戻り値がその ID になります。
ラージオブジェクトが実際に格納されるのは、システムカタログの 
pg_largeobject テーブルです。このテーブルの loid フィールドの値がオブジェ
クトのIDとなります。ちゃんとデータが登録されたかどうかは、この loid とイ
ンポート時の戻り値のIDを照合することで可能です。

ただ、この pg_largeobject にはファイル名を保存しておけないので、私の場合
は別個にラージオブジェクトの管理テーブルのようなものを作っておき、そこに 
pg_loimport() の戻り値(オブジェクトID)と対にしてファイル名を登録してます。

※PHP-4.0.6でラージオブジェクトを触っているとよく落ちるようです。


------8<------
yutaka akune
csakune@ipc.pioneer.co.jp