(PHP 4 >= 4.2.0, PHP 5, PHP 7, PHP 8)
pg_lo_open — Abre un objeto de gran tamaño de PostgreSQL
pg_lo_open() abre un objeto grande en la base de datos y devuelve una instancia de PgSql\Lob para que pueda ser manipulado.
No cerrar la conexión a la base de datos antes de cerrar la instancia PgSql\Lob .
Para utilizar un objeto de gran tamaño (lo), es
necesario hacerlo dentro de una transacción.
Nota:
Anteriormente, esta función se llamaba pg_loopen().
connectionUna PgSql\Connection instancia.
Cuando connection no es especificado, se usa la conexión por
defecto. La conexión predeterminada es la última conexión hecha por pg_connect()
o pg_pconnect()
Desde PHP 8.1.0, usar la conexión predeterminada está obsoleto.
oidEl OID del objeto de gran tamaño en la base de datos.
modePuede ser "r" para solo lectura, "w" para solo escritura o "rw" para lectura y escritura.
| Versión | Descripción |
|---|---|
| 8.1.0 | Ahora devuelve una instancia de PgSql\Lob ; anteriormente, se devolvía un resource . |
| 8.1.0 |
El parámetro connection ahora espera una instancia de PgSql\Connection
; anteriormente, se esperaba un resource .
|
Ejemplo #1 Ejemplo con 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, "datos de objeto de gran tamaño");
pg_lo_close($handle);
pg_query($database, "commit");
?>
Just for the record, a user must be a superuser (database owner) in order to invoke pg_lo_open() (though pg_lo_create() may be invoked...). This opens a gigantic security hole in the db. If a user is not a superuser, db will raise an error with message "Can't create Large Object.".
Thus, imho, one should use pg_escape_bytea() instead.If I've just tested the functions pg_lo_write(),pg_lo_create() and pg_lo_open() with PHP8.0 to PHP8.4 , there is no need to be a superuser to write a large object.