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.
pg_lo_open
(PHP 4 >= 4.2.0, PHP 5)
pg_lo_open — Ouvre un objet de grande taille PostgreSQL
Description
pg_lo_open() ouvre un objet de type Inversion Large Object et retourne un pointeur de fichier pour cet objet permettant ainsi d'être manipulé.
Ne fermer pas la connexion à la base de données avant de fermer la ressource de l'objet de grande taille.
Pour utiliser un objet de grande taille (lo), il est nécessaire de le faire dans une transaction.
Note: Auparavant, cette fonction s'appelait pg_loopen().
Liste de paramètres
- connection
-
La ressource de connexion de la base de données PostgreSQL. Lorsque connection n'est pas présent, la connexion par défaut est utilisée. La connexion par défaut est la dernière connexion faite par pg_connect() ou pg_pconnect().
- oid
-
Le OID de l'objet de grande taille dans la base de données.
- mode
-
Peut être "r" pour lecture seule, "w" pour écriture seule ou "rw" pour lecture et écriture.
Valeurs de retour
Une ressource d'objet de grande taille ou FALSE en cas d'erreur.
Exemples
Exemple #1 Exemple avec 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, "données objet de grande taille");
pg_lo_close($handle);
pg_query($database, "commit");
?>
Voir aussi
- pg_lo_close() - Ferme un objet de grande taille PostgreSQL
- pg_lo_create() - Crée un objet de grande taille PostgreSQL
pg_lo_open
29-Aug-2005 06:15
24-Oct-2002 10:49
//INSERT FILE INTO DB
$fp = fopen($filename,"r");
$buffer = fread($fp,filesize($filename));
fclose($fp);
pg_query ($conn, "begin");
$oid = pg_lo_create ($conn);
//echo "$oid\n";
$rs = pg_exec($conn,"insert into table(object) values($oid);");//object field type must be "oid"
$handle = pg_lo_open ($conn, $oid, "w");
//echo "$handle\n";
pg_lo_write ($handle, $buffer);
pg_lo_close ($handle);
pg_query ($conn, "commit"); //OR END
pg_close();
//GET BUFFER(file) FROM DB
$rs = pg_exec($conn,"select object from objects where id = xxxxxx;");
$row = pg_fetch_row($rs,0);
pg_query ($conn, "begin");
$loid = pg_lo_open($conn,$row[0], "r");
pg_lo_read_all ($loid);
pg_lo_close ($loid);
pg_query ($conn, "commit"); //OR END
pg_close();
