當您使用 pg_lowrite() 修改大型物件時,請注意先移除舊的物件:如果新的物件比之前的物件小,它只會覆蓋開頭,而舊物件的結尾會被保留(使用「w」參數開啟,PHP 4.04 Linux RH)。
(PHP 4 >= 4.2.0, PHP 5, PHP 7, PHP 8)
pg_lo_write — 寫入大型物件
pg_lo_write() 將資料寫入大型物件,從目前的搜尋位置開始。
要使用大型物件介面,必須將其包含在一個事務區塊中。
注意事項:
這個函式以前被稱為 pg_lowrite()。
lob
一個 PgSql\Lob 實例,由 pg_lo_open() 返回。
data
要寫入大型物件的資料。如果 length
是一個 int 且小於 data
的長度,則只會寫入 length
個位元組。
length
一個可選的要寫入的最大位元組數。必須大於零且不大於 data
的長度。預設為 data
的長度。
寫入大型物件的位元組數,或者錯誤時返回 false
。
範例 #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");
?>
當您使用 pg_lowrite() 修改大型物件時,請注意先移除舊的物件:如果新的物件比之前的物件小,它只會覆蓋開頭,而舊物件的結尾會被保留(使用「w」參數開啟,PHP 4.04 Linux RH)。
使用 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 個人工小時。