PHP Conference Japan 2024

Pdo\Pgsql::lobCreate

(PHP 8 >= 8.4.0)

Pdo\Pgsql::lobCreate创建一个新的大型对象

描述

public Pdo\Pgsql::lobCreate(): 字符串|false

Pdo\Pgsql::lobCreate() 创建一个大型对象并返回引用它的OID。可以使用 Pdo\Pgsql::lobOpen() 打开它来读取或写入数据。

OID可以存储在OID类型的列中,并用于引用大型对象,而不会导致行的大小无限增长。大型对象将继续存在于数据库中,直到通过调用 Pdo\Pgsql::lobUnlink() 删除它。

大型对象使用起来很麻烦。实际上,需要在删除整个数据库中引用OID的最后一行之前调用 Pdo\Pgsql::lobUnlink();否则,未引用的大型对象将无限期地保留在服务器上。此外,大型对象没有访问控制。另一种选择是bytea列类型,其大小可以达到1GB,并且此列类型透明地管理存储以优化行大小。

注意: 此函数以及大型对象的所有操作都必须在事务中调用和执行。

参数

此函数没有参数。

返回值

成功时返回新创建的大型对象的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();
?>

参见

添加注释

用户贡献的注释

此页面没有用户贡献的注释。
To Top