PHP Conference Japan 2024

pg_lo_write

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

pg_lo_write写入大对象

描述

pg_lo_write(PgSql\Lob $lob, string $data, ?int $length = null): int|false

pg_lo_write() 将数据写入大对象当前的查找位置。

要使用大对象接口,需要将其包含在事务块中。

注意:

此函数以前称为 pg_lowrite()

参数

lob

一个 PgSql\Lob 实例,由 pg_lo_open() 返回。

data

要写入大对象的数据。如果 length 是一个 int 且小于 data 的长度,则只写入 length 个字节。

length

可选的最大写入字节数。必须大于零且不大于 data 的长度。默认为 data 的长度。

返回值

写入大对象的字节数,或在出错时返回 false

变更日志

版本 描述
8.1.0 lob 参数现在期望一个 PgSql\Lob 实例;以前,期望一个 resource
8.0.0 length 现在可以为空。

示例

示例 #1 pg_lo_write() 示例

<?php
$doc_oid
= 189762345;
$data = "This will overwrite the start of the large object.";
$database = pg_connect("dbname=jacarta");
pg_query($database, "begin");
$handle = pg_lo_open($database, $doc_oid, "w");
$data = pg_lo_write($handle, $data);
pg_query($database, "commit");
?>

参见

添加注释

用户贡献的注释 2 个注释

cedric at isoca.com
23 年前
请注意,当您使用 pg_lowrite() 修改 lo 时,请先删除旧的 lo:如果新的 lo 小于之前的 lo,它只会覆盖开头,并且您会保留旧 lo 的末尾(使用“w”参数打开,PHP 4.04 Linux RH)。
nandrews at logictree dot co dot uk
21 年前
使用 php 4.3.0 和 PostgreSQL 7.3.1

我可以编写一个简单的脚本,其中 pg_lo_write 似乎总是返回 1,而不是写入的字节数,这可以通过其他方式提取数据来证明。

此外,我可以使此 pg_lo_write 失败,或者至少无法写入所有数据,如果没有返回写入的字节数,很难判断,并且不会返回 false 值。此外,lo 资源已被调整,因此它包含的 oid 为 0。

不幸的是,我不知道确切的故障模式是什么,它似乎位于 PostgreSQL 的 IP 网络通信方面,这很奇怪,因为 unix 域通信对此工作正常。但是,如果 pg_lo_write() 函数按广告宣传的那样返回,那将很有用,它可以节省我和开发团队用来诊断此问题的人工时数。
To Top