注意,当你使用 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() 函数能够按广告宣传的那样返回,那将是有用的,它将节省我和开发团队投入到诊断这个问题中的 2 个工时。