请注意,当您使用 pg_lowrite() 修改 lo 时,请先删除旧的 lo:如果新的 lo 小于之前的 lo,它只会覆盖开头,并且您会保留旧 lo 的末尾(使用“w”参数打开,PHP 4.04 Linux RH)。
(PHP 4 >= 4.2.0, PHP 5, PHP 7, PHP 8)
pg_lo_write — 写入大对象
pg_lo_write() 将数据写入大对象当前的查找位置。
要使用大对象接口,需要将其包含在事务块中。
注意:
此函数以前称为 pg_lowrite()。
lob
一个 PgSql\Lob 实例,由 pg_lo_open() 返回。
data
要写入大对象的数据。如果 length
是一个 int 且小于 data
的长度,则只写入 length
个字节。
length
可选的最大写入字节数。必须大于零且不大于 data
的长度。默认为 data
的长度。
写入大对象的字节数,或在出错时返回 false
。
示例 #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");
?>
请注意,当您使用 pg_lowrite() 修改 lo 时,请先删除旧的 lo:如果新的 lo 小于之前的 lo,它只会覆盖开头,并且您会保留旧 lo 的末尾(使用“w”参数打开,PHP 4.04 Linux RH)。
使用 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() 函数按广告宣传的那样返回,那将很有用,它可以节省我和开发团队用来诊断此问题的人工时数。