(PHP 5 >= 5.1.2, PHP 7, PECL pdo_pgsql >= 1.0.2)
PDO::pgsqlLOBCreate — Создать новый большой объект (LOB)
Функция PDO::pgsqlLOBCreate() создает большой объект (LOB) и возвращает его OID. Вы можете открыть поток для чтения или изменения объекта, используя функцию PDO::pgsqlLOBOpen(). OID можно сохранить в столбце типа OID и использовать как ссылку на LOB не вызывая неконтролируемого увеличения размера строк. LOB будет жить в базе данных пока не будет удален с помощью функции PDO::pgsqlLOBUnlink().
Большие объекты могут быть до 2ГБ размером, но они очень громоздкие. Вы должны убедиться, что выполнили PDO::pgsqlLOBUnlink() до того, как удалите последнюю строку в вашей БД, которая ссылается на его OID. К тому же, большие объекты не имеют контроля доступа. В качестве альтернативы попробуйте использовать тип данных bytea. Последние версии PostgreSQL разрешают столбцы типа bytea до 1ГБ размером и прозрачно управляют табличным пространством для оптимизации длины строк.
Замечание: Эту функцию необходимо выполнять в транзакции.
PDO::pgsqlLOBCreate() не принимает параметров.
Возвращает OID созданного объекта или FALSE
.
Пример #1 Пример использования PDO::pgsqlLOBCreate()
В этом примере создается LOB и наполняется данными из файла. После этого его OID сохраняется в таблице.
<?php
$db = new PDO('pgsql:dbname=test host=localhost', $user, $pass);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->beginTransaction();
$oid = $db->pgsqlLOBCreate();
$stream = $db->pgsqlLOBOpen($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(array($some_id, $oid));
$db->commit();
?>