2024 年 PHP Conference Japan

pg_lo_write

(PHP 4 >= 4.2.0, PHP 5, PHP 7, PHP 8)

pg_lo_write寫入大型物件

說明

pg_lo_write(PgSql\Lob $lob, string $data, ?int $length = null): int|false

pg_lo_write() 將資料寫入大型物件,從目前的搜尋位置開始。

要使用大型物件介面,必須將其包含在一個事務區塊中。

注意事項:

這個函式以前被稱為 pg_lowrite()

參數

lob

一個 PgSql\Lob 實例,由 pg_lo_open() 返回。

data

要寫入大型物件的資料。如果 length 是一個 int 且小於 data 的長度,則只會寫入 length 個位元組。

length

一個可選的要寫入的最大位元組數。必須大於零且不大於 data 的長度。預設為 data 的長度。

返回值

寫入大型物件的位元組數,或者錯誤時返回 false

更新日誌

版本 說明
8.1.0 lob 參數現在需要一個 PgSql\Lob 實例;以前需要一個 資源
8.0.0 length 現在可以為 null。

範例

範例 #1 pg_lo_write() 範例

<?php
$doc_oid
= 189762345;
$data = "這將覆蓋大型物件的開頭。";
$database = pg_connect("dbname=jacarta");
pg_query($database, "begin");
$handle = pg_lo_open($database, $doc_oid, "w");
$data = pg_lo_write($handle, $data);
pg_query($database, "commit");
?>

參見

新增筆記

使用者貢獻的筆記 2 則筆記

cedric at isoca.com
23 年前
當您使用 pg_lowrite() 修改大型物件時,請注意先移除舊的物件:如果新的物件比之前的物件小,它只會覆蓋開頭,而舊物件的結尾會被保留(使用「w」參數開啟,PHP 4.04 Linux RH)。
nandrews at logictree dot co dot uk
21 年前
使用 php 4.3.0 和 PostgreSQL 7.3.1

我可以寫一個簡單的腳本,其中 pg_lo_write 似乎總是返回 1,而不是寫入的位元組數,這可以透過其他方式提取資料來證明。

此外,我可以讓這個 pg_lo_write 失敗,或者至少無法寫入所有資料(沒有返回寫入的位元組數,很難判斷),並且沒有返回 false 值。除此之外,大型物件資源已被調整,使其包含的 oid 為 0。

遺憾的是,我不知道確切的失敗模式是什麼,它似乎是在 PostgreSQL 的 IP 網路通訊端,這很奇怪,因為 Unix 域通訊在這方面工作正常。然而,如果 pg_lo_write() 函式能按說明返回結果,那就更好了,這可以節省我和開發團隊用於診斷此問題的 2 個人工小時。
To Top