pg_lo_open

(PHP 4 >= 4.2.0, PHP 5)

pg_lo_open -- 打开一个大型对象

说明

resource pg_lo_open ( resource connection, int oid, string mode )

pg_lo_open() 打开一个大型对象并返回大型对象资源号。该资源号内封装了连接号。oid 指定了有效的大型对象的 oid,mode 可以为 "r","w" 或者 "rw"。如果失败则返回 FALSE

警告

在关闭大型对象资源之前不要关闭数据库连接。

要使用大型对象(lo)接口,需要将其放置在事务块中。

注: 本函数以前的名字为 pg_loopen()

参见 pg_lo_close()pg_lo_create()


add a note add a note User Contributed Notes
metator at netcabo dot pt
30-Aug-2005 02:15
Just for the record, a user must be a superuser (database owner) in order to invoke pg_lo_open() (though pg_lo_create() may be invoked...). This opens a gigantic security hole in the db. If a user is not a superuser, db will raise an error with message "Can't create Large Object.".
Thus, imho, one should use pg_escape_bytea() instead.
riccardo_ridenti at hotmail dot com
24-Oct-2002 06:49
//INSERT FILE INTO DB
$fp = fopen($filename,"r");
       $buffer = fread($fp,filesize($filename));
   fclose($fp);
   pg_query ($conn, "begin");
   $oid = pg_lo_create ($conn);
   //echo "$oid\n";
     $rs = pg_exec($conn,"insert into table(object) values($oid);");//object field type must be "oid"
   $handle = pg_lo_open ($conn, $oid, "w");
   //echo "$handle\n";
   pg_lo_write ($handle, $buffer);
   pg_lo_close ($handle);
   pg_query ($conn, "commit"); //OR END
pg_close();

//GET BUFFER(file) FROM DB
$rs = pg_exec($conn,"select object from objects where id = xxxxxx;");
$row = pg_fetch_row($rs,0);
pg_query ($conn, "begin");
   $loid = pg_lo_open($conn,$row[0], "r");
   pg_lo_read_all ($loid);
   pg_lo_close ($loid);
pg_query ($conn, "commit"); //OR END
pg_close();