上面的例子缺少一些数据。Jeff Davis 在 IRC (freenode) 的 PostgreSQL 频道中花费了几个小时尝试徒劳地使其工作,他发现了缺少的部分。
以下示例将起作用,但您必须插入要存储的大型对象的 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。