phpday 2025 - Call For Papers

pg_lo_write

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

pg_lo_writeEscreve em um objeto grande

Descrição

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

pg_lo_write() grava dados em um objeto grande na posição de busca atual.

Para usar a interface de objeto grande, é necessário incluí-la em um bloco de transação.

Nota:

Esta função costumava ser chamada de pg_lowrite().

Parâmetros

lob

Uma instância de PgSql\Lob, retornada por pg_lo_open().

data

Os dados a serem gravados no objeto grande. Se length for um int e for menor que o comprimento de data, apenas os bytes de length serão gravados.

length

Um número máximo opcional de bytes a serem gravados. Deve ser maior que zero e não maior que o comprimento dos data. O padrão é o comprimento dos data.

Valor Retornado

O número de bytes gravados no objeto grande, ou false em caso de erro.

Registro de Alterações

Versão Descrição
8.1.0 O parâmetro lob agora espera uma instância de PgSql\Lob; anteriormente, um resource era esperado.
8.0.0 length agora é anulável.

Exemplos

Exemplo #1 Exemplo de pg_lo_write()

<?php
$doc_oid
= 189762345;
$data = "Isto irá substituir o início do objeto grande.";
$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");
?>

Veja Também

adicione uma nota

Notas Enviadas por Usuários (em inglês) 2 notes

up
0
cedric at isoca.com
23 years ago
Be aware when you modify a lo with pg_lowrite() to remove first the old one : if the new lo is smaller than the one before, it only overwrite the begining and you keep the end of the old lo (open with "w" parameter, PHP 4.04 Linux RH).
up
-1
nandrews at logictree dot co dot uk
21 years ago
Using php 4.3.0 and PostgreSQL 7.3.1

I can write a simple script in which pg_lo_write seems to always return 1 and not the number of bytes written, as evidenced by extracting the data through another means.

Further more, I can make this pg_lo_write fail, or at least fail to write all the data it's pretty difficult to tell without the number of bytes written being returned, and not return the false value. In addition to this, the lo resource has been adjusted so that the oid it contains is 0.

Unfortunately, I do not know what exactly the failure mode is, it does seem to be in the ip network communication side of PostgreSQL, which is odd since the unix domain comms works fine for this. However, it would have been useful to have the pg_lo_write() function return as advertised, it would have saved some of the 2 man hours me and the dev. team put into diagnosing this problem.
To Top