[PHP-doc 949] PDO::pgsqlLOBOpen() の例

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

[PHP-doc 949] PDO::pgsqlLOBOpen() の例

Kenji Suzuki
Kenji です。


http://php.net/manual/ja/pdo.pgsqllobopen.php の

 例1 PDO::pgsqlLOBOpen() の例

が動作しませんでしたので、報告します。

PDO_PGSQL の場合、LOB は専用の API で取得する必要があるため、
以下のようにする必要があるのではないかと思います。

カラム oid はラージオブジェクトではなく OID そのものが保存されて
います。

header() はファイルが保存されるように追加しました。


<?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 from BLOBS where ident = ?");
$stmt->execute(array($some_id));
$stmt->bindColumn('oid', $oid, PDO::PARAM_STR);
$stmt->fetch(PDO::FETCH_BOUND);
$stream = $db->pgsqlLOBOpen($oid, 'r');
header("Content-type: application/octet-stream");
fpassthru($stream);


// Kenji
_______________________________________________
PHP-doc mailing list
[hidden email]
http://ml.php.gr.jp/mailman/listinfo/php-doc
Reply | Threaded
Open this post in threaded view
|

[PHP-doc 950] Re: PDO::pgsqlLOBOpen() の例

TAKAGI Masahiro-4
高木です。

2013/1/18 Kenji Suzuki <[hidden email]>:

> http://php.net/manual/ja/pdo.pgsqllobopen.php の
>
>  例1 PDO::pgsqlLOBOpen() の例
>
> が動作しませんでしたので、報告します。
>
> PDO_PGSQL の場合、LOB は専用の API で取得する必要があるため、
> 以下のようにする必要があるのではないかと思います。
>
> カラム oid はラージオブジェクトではなく OID そのものが保存されて
> います。
これはひどい。

同ページのUser Contributed Notesでもだいぶ前(2008年!)から指摘されていたようですが、
完全にスルーされていましたね……。

原文も含めて対応しておきました。ありがとうございました。

http://news.php.net/php.doc.cvs/10954
http://news.php.net/php.doc.ja/3672

--
TAKAGI Masahiro mailto:[hidden email]
_______________________________________________
PHP-doc mailing list
[hidden email]
http://ml.php.gr.jp/mailman/listinfo/php-doc