(PHP 8 >= 8.4.0)
Pdo\Pgsql::lobCreate — 建立新的大型物件
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();
?>