(PHP 8 >= 8.4.0)
Pdo\Pgsql::lobCreate — Créer un nouvel objet large
Pdo\Pgsql::lobCreate() crée un objet large et retourne l'OID qui le référence. Il peut être ouvert pour lire ou écrire des données avec Pdo\Pgsql::lobOpen().
L'OID peut être stocké dans des colonnes de type OID et être utilisé pour référencer l'objet large, sans que la ligne ne grossisse de manière arbitraire. L'objet large continuera d'exister dans la base de données jusqu'à ce qu'il soit supprimé en appelant Pdo\Pgsql::lobUnlink().
Les objets larges sont des objets volumineux à utiliser. En effet, il est nécessaire d'appeler Pdo\Pgsql::lobUnlink() avant de supprimer la dernière ligne référençant l'OID dans toute la base de données ; sinon, les objets larges non référencés resteront sur le serveur indéfiniment. De plus, les objets larges n'ont pas de contrôles d'accès. Une alternative est le type de colonne bytea, qui peut être jusqu'à 1 Go de taille, et ce type de colonne gère de manière transparente le stockage pour une taille de ligne optimale.
Note: Cette fonction, et toutes les manipulations de l'objet large, doivent être appelées et effectuées dans une transaction.
Cette fonction ne contient aucun paramètre.
Renvoie l'OID du nouvel objet large créé en cas de succès,
ou false
si une erreur survient.
Exemple #1 Pdo\Pgsql::lobCreate() example
Cet exemple crée un nouvel objet large et copie le contenu d'un fichier dedans. L'OID est ensuite stocké dans une table.
<?php
$db = new Pdo\Pgsql('pgsql:dbname=test host=localhost', $user, $pass);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->beginTransaction();
$oid = $db->lobCreate();
$stream = $db->lobOpen($oid, 'w');
$local = fopen($filename, 'rb');
stream_copy_to_stream($local, $stream);
$local = null;
$stream = null;
$stmt = $db->prepare("INSERT INTO BLOBS (ident, oid) VALUES (?, ?)");
$stmt->execute([$some_id, $oid]);
$db->commit();
?>