上面的例子缺少一些資料。在花了幾個小時試圖讓它運作卻徒勞無功之後,來自 IRC (freenode) 上 PostgreSQL 頻道的 Jeff Davis 發現了缺少的部分。
以下範例可以運作,但您必須插入您正在儲存的大型物件的 MIME 類型和檔案大小,以便您可以使用該資料進行提取。
<?php
$db = new PDO('pgsql:dbname=test host=localhost', $user, $pass);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->beginTransaction();
$stmt = $db->prepare("SELECT oid, blob_type, filesize FROM BLOBS WHERE ident = ?");
$stmt->execute(array($some_id));
$stmt->bindColumn('oid', $lob, PDO::PARAM_LOB);
$stmt->bindColumn('blob_type', $blob_type, PDO::PARAM_STR);
$stmt->bindColumn('filesize', $filesize, PDO::PARAM_STR);
$stmt->fetch(PDO::FETCH_BOUND);
$stream = $pdo->pgsqlLOBOpen($lob, 'r');
$data = fread($stream, $filesize);
header("Content-type: $blob_type");
echo $data;
?>
此外,`fpassthru()` 只會產生以下結果:警告:`fpassthru()`:提供的參數不是有效的串流資源,位於...
請使用 `echo` 或 `print` 作為替代。