pg_lo_open

(PHP 4 >= 4.2.0, PHP 5, PHP 7, PHP 8)

pg_lo_open — ラージオブジェクトをオープンする

説明

function pg_lo_open(PgSql\Connection $connection, int $oid, string $mode): PgSql\Lob|false

pg_lo_open() はデータベース内にラージオブジェクトを オープンし、それを操作するための PgSql\Lob クラスのインスタンスを返します。

警告

PgSql\Lob のインスタンスを閉じる前にデータベースへの接続を 閉じないでください。

ラージオブジェクトインターフェイスは、トランザクションブロックの中で 使用する必要があります。

注意:

この関数は、以前は pg_loopen() と呼ばれていました。

パラメータ

connection

PgSql\Connection クラスのインスタンス。 connection が指定されない場合は、デフォルトの接続を使います。 デフォルトの接続とは、pg_connect() または pg_pconnect() によって確立された直近の接続です。

警告

PHP 8.1.0 以降では、デフォルトの接続を使うことは推奨されなくなりました。

oid

データベース内のラージオブジェクトの OID 。

mode

読み込み専用の "r"、書き込み専用の "w"、読み書き可能な "rw" のいずれか。

戻り値

PgSql\Lob クラスのインスタンスを返します。 失敗した場合に false を返します

変更履歴

バージョン 説明
8.1.0 PgSql\Lob クラスのインスタンスを返すようになりました。 これより前のバージョンでは、resource を返していました。
8.1.0 connection は、PgSql\Connection クラスのインスタンスを期待するようになりました。 これより前のバージョンでは、resource を期待していました。

例

例1 pg_lo_open() の例

<?php
   $database = pg_connect("dbname=jacarta");
   pg_query($database, "begin");
   $oid = pg_lo_create($database);
   echo "$oid\n";
   $handle = pg_lo_open($database, $oid, "w");
   echo "$handle\n";
   pg_lo_write($handle, "large object data");
   pg_lo_close($handle);
   pg_query($database, "commit");
?>

参考

+add a note

User Contributed Notes 2 notes

up
1
metator at netcabo dot pt
21 years ago
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.
up
0
danydb at noalyss dot eu
1 year ago
If I've just tested the functions pg_lo_write(),pg_lo_create() and pg_lo_open() with PHP8.0 to PHP8.4 , there is no need to be a superuser to write a large object.