为了记录,用户必须是超级用户(数据库所有者)才能调用 pg_lo_open()(尽管可以调用 pg_lo_create()...)。这会在数据库中打开一个巨大的安全漏洞。如果用户不是超级用户,数据库将引发错误,消息为“无法创建大型对象”。
因此,恕我直言,应该使用 pg_escape_bytea()。
(PHP 4 >= 4.2.0, PHP 5, PHP 7, PHP 8)
pg_lo_open — 打开一个大型对象
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"(读写)。
版本 | 描述 |
---|---|
8.1.0 | 现在返回一个 PgSql\Lob 实例;以前,返回的是一个 资源。 |
8.1.0 | connection 参数现在期望一个 PgSql\Connection 实例;以前,期望的是一个 资源。 |
示例 #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");
?>
为了记录,用户必须是超级用户(数据库所有者)才能调用 pg_lo_open()(尽管可以调用 pg_lo_create()...)。这会在数据库中打开一个巨大的安全漏洞。如果用户不是超级用户,数据库将引发错误,消息为“无法创建大型对象”。
因此,恕我直言,应该使用 pg_escape_bytea()。