PHP Conference Nagoya 2025

pg_lo_create

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

pg_lo_create Crée un objet de grande taille PostgreSQL

Description

pg_lo_create(PgSql\Connection $connection = ?, mixed $object_id = ?): int
pg_lo_create(mixed $object_id): int

pg_lo_create() crée un objet de grande taille et retourne son OID. Les modes d'accès PostgreSQL INV_READ, INV_WRITE et INV_ARCHIVE ne sont pas supportés : l'objet peut toujours être créé avec des droits d'accès en lecture et écriture. Le mode INV_ARCHIVE a été supprimé des bases PostgreSQL (version 6.3 et ultérieur).

Pour utiliser un objet de grande taille, il est nécessaire de le faire dans une transaction.

Au lieu d'utiliser l'interface d'objet de grande taille ((qui n'a aucun contrôle d'accès et qui est encombrant à utiliser), essayez la colonne de type bytea de PostgreSQL et pg_escape_bytea().

Note:

Auparavant, cette fonction s'appelait pg_locreate().

Liste de paramètres

connection

Une instance PgSql\Connection. Quand connection est pas spécifié, la connexion par défaut est utilisé. La connexion par défaut est la dernière connexion faite par pg_connect() ou pg_pconnect()

Avertissement

À partir de PHP 8.1.0, utiliser la connexion par défaut est obsolète.

object_id

Si le paramètre object_id est fourni, la fonction essayera de créer un objet large avec cet identifiant, sinon, un identifiant d'objet disponible sera assigné par le serveur. Ce paramètre dépend d'une fonctionnalité qui est apparue avec PostgreSQL 8.1.

Valeurs de retour

Un objet large OID, ou false si une erreur survient.

Historique

Version Description
8.1.0 Le paramètre connection attend désormais une instance de PgSql\Connection ; auparavant, une ressource était attendu.

Exemples

Exemple #1 Exemple avec pg_lo_create()

<?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");
?>

add a note

User Contributed Notes 1 note

up
0
andrea dot galli at acotel dot com
21 years ago
<?php
// --------- OPEN CONN ---

$conn = pg_connect("host='127.0.0.1' dbname='test' user='usertest' password='passtest'");

// --------- OPEN FILE ---

$fp = fopen('logo.gif', "r");
$buffer = fread($fp, filesize('logo.gif'));
fclose($fp);

// --------- CREATE - INSERT OID ---

pg_exec($conn, "begin");

$oid = pg_locreate($conn);

$rs = pg_exec($conn,"INSERT INTO test(tipo, images) VALUES('A1', $oid);");
$handle = pg_loopen ($conn, $oid, "w");

pg_lowrite ($handle, $buffer);
pg_loclose ($handle);

pg_exec($conn, "commit");

// --------- OPEN - INSERT OID ---

$rs = pg_exec($conn, "SELECT images FROM test WHERE tipo = 'A1';");
$row = pg_fetch_row($rs, 0);

pg_exec($conn, "begin");
$loid = pg_loopen($conn, $row[0], "r");

header("Content-type: image/gif");

pg_loreadall($loid);
pg_loclose($loid);

pg_exec ($conn, "commit");

// --------- UNLINK OID ---

pg_exec($conn, "begin");

$loid = $row[0];
pg_lounlink($conn, $loid);

pg_exec ($conn, "commit");

// --------- DELETE OID ---

pg_exec($conn, "DELETE FROM test WHERE tipo = 'A1';");

// --------- CLOSE CONN ---

pg_close();
?>
To Top