2

データベースから BLOB データを読み取ろうとすると、次のようになります。

xffd8ffe000104a46494600010201006000600000...

Windows OS のみで、Linux では正常に動作します。

SQL:

select lob from table where id = ...

使用しようとしましたが::bytea、何も変わりませんでした

PHPでは、PDOでフェッチするだけで、file_put_contents

を使用してデータを変換できconvert_from(lob, 'UTF8')、xml で動作しますが、バイナリ データ (zip など) のソリューションが必要です

更新:phpコード

$db = new PDO('pgsql:...');
$pds = $db->prepare("select lob from table where id = :id");
$pds->bindParam('id', $id);
$pds->execute();
$r = $pds->fetch(PDO::FETCH_ASSOC);
file_put_contents('Chrysanthemum.jpg', $r['lob']);
4

1 に答える 1

2

bytea_output質問に示されている 16 進文字列は、パラメータが に設定されている場合、PostgreSQL 9.0 以降によって生成されますhex

この問題のもっともらしい理由は、Windows 上の PHP が 9.0 より前のバージョンにリンクされていることlibpqです。これらの古いバージョンは、これらのコンテンツをデコードしません。

新しいlibpqにアップグレードするか、バイト値を選択する前に回避策として実行できます。

$db->query("SET bytea_output=escape");

これにより、(現在のセッションでは) bytea テキスト表現が、古いバージョンと新しいバージョンの両方でlibpqデコードできる古い方法に戻ります。

于 2013-02-27T13:11:41.403 に答える