(PHP 4 >= 4.2.0, PHP 5, PHP 7, PHP 8)
pg_lo_open — Открывает большой объект базы данных
pg_lo_open() открывает большой объект базы данных и возвращает экземпляр PgSql\Lob .
Не следует закрывать соединение с базой данных до того, как завершится работа с экземпляром PgSql\Lob .
Операции с использованием интерфейса больших объектов необходимо заключать в блок транзакции.
Замечание:
Прежнее название функции: pg_loopen().
connectionЭкземпляр
класса PgSql\Connection .
Функция выберет соединение по умолчанию, если параметр connection не указали.
Соединение по умолчанию — последнее соединение, которое установила функция pg_connect()
или pg_pconnect() .
Начиная с PHP 8.1.0 выбор функцией соединения по умолчанию устарел.
oidOID большого объекта в базе данных.
modeРежим доступа к объекту. Возможные значения: "r" - только для чтения, "w" - только для записи, "rw" - для чтения и записи.
| Версия | Описание |
|---|---|
| 8.1.0 | Возвращает экземпляр PgSql\Lob ; ранее возвращался ресурс (resource ). |
| 8.1.0 |
Параметр connection теперь принимает
объект PgSql\Connection ; раньше параметр принимал тип resource .
|
Пример #1 Пример использования 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, "large object data");
pg_lo_close($handle);
pg_query($database, "commit");
?>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.If I've just tested the functions pg_lo_write(),pg_lo_create() and pg_lo_open() with PHP8.0 to PHP8.4 , there is no need to be a superuser to write a large object.