(PHP 8 >= 8.4.0)
Pdo\Pgsql::lobCreate — Создает новый большой объект (LOB)
Метод Pdo\Pgsql::lobCreate() создаёт большой объект и возвращает OID, который на него ссылается. Его можно открыть для чтения или записи данных с помощью метода Pdo\Pgsql::lobOpen().
OID может храниться в столбцах типа OID и использоваться для ссылок на большой объект, не вызывая произвольного роста строки. Большой объект будет храниться в базе данных до тех пор, пока его не удалят вызовом метода Pdo\Pgsql::lobUnlink().
Большие объекты громоздки в использовании. Действительно, необходимо, чтобы метод Pdo\Pgsql::lobUnlink() вызывался до удаления последней строки, ссылающейся на OID во всей базе данных; в противном случае большой объект без ссылок будут оставаться на сервере неопределенное время. Кроме того, большие объекты не имеют контроля доступа. Альтернативой является тип столбца bytea, размер которого может достигать 1 ГБ, и этот тип столбца прозрачно управляет хранением для оптимального размера строки.
Замечание: Функция и все манипуляции с большим объектом должны вызываться и выполняться в рамках транзакции.
У этой функции нет параметров.
Метод возвращает OID только что созданного большого объекта
в случае успешного выполнения или false
, если возникла ошибка.
Пример #1 Пример использования метода Pdo\Pgsql::lobCreate()
В примере создаётся новый большой объект и в него копируется содержимое файла. Затем OID сохраняется в таблице.
<?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();
?>