【问题标题】:Inserting pdf/images in postgresql bytea column in php在 php 的 postgresql bytea 列中插入 pdf/图像
【发布时间】:2015-11-23 11:37:56
【问题描述】:

我正在尝试在 postgresql bytea 列中插入 pdf 或图像作为 blob。这是我尝试过的

$file =  $_FILES['attachments']['tmp_name'][$i];
        if($file != '') {
            $p = fopen($file,'r');
            $data = fread($p,filesize($file));
            $data = addslashes($data);
//                $data = file_get_contents($file);
            $escaped_data = pg_escape_bytea($data);
            $ext = pathinfo($_FILES['attachments']['name'][$i], PATHINFO_EXTENSION);
            $blobQuery = $dbconn->prepare("INSERT INTO app_blob(blob_name, blob_type, blob_date, blob_data) values(:blob_name,:blob_type,NOW(),:blob_data) RETURNING blob_id");
            $blobQuery->bindParam(':blob_data', $escaped_data, PDO::PARAM_LOB);
            $blobQuery->bindParam(':blob_name', $_FILES['attachments']['name'][$i]);
            $blobQuery->bindParam(':blob_type', $ext);
            $blobQuery->execute();
            $blob_id = $blobQuery->fetchColumn();
        }      

我也尝试了许多不同的方法,比如不指定参数类型。我要么得到一个空的白色 pdf,要么得到一个损坏的。在这里实现我想要的最佳方式是什么?

【问题讨论】:

  • 使用 PDO,并且使用pg_escape_byteapg_unescape_bytea。只需通过PDO::PARAM_LOB
  • 谢谢克雷格,你的评论帮助了我。

标签: php postgresql pdf pdo


【解决方案1】:

我刚刚发现我做错了什么。如果有人稍后遇到类似问题并需要像我这样的帮助,我将在此处发布更新的代码。正如克雷格所说,我们不必使用pg_escape_byteaaddslashes。我们只需要简单地使用 fopen 打开文件,在我的例子中是二进制格式,然后绑定参数,指定参数类型为PDO::PARAM_LOB

  $file =  $_FILES['attachments']['tmp_name'][$i];
        if($file != '') {
            $p = fopen($file,'rb');
            $ext = pathinfo($_FILES['attachments']['name'][$i], PATHINFO_EXTENSION);
            $blobQuery = $dbconn->prepare("INSERT INTO app_blob(blob_name, blob_type, blob_date, blob_data) values(:blob_name,:blob_type,NOW(),:blob_data) RETURNING blob_id");
            $blobQuery->bindParam(':blob_data', $p, PDO::PARAM_LOB);
            $blobQuery->bindParam(':blob_name', $_FILES['attachments']['name'][$i]);
            $blobQuery->bindParam(':blob_type', $ext);
            $blobQuery->execute();
            $blob_id = $blobQuery->fetchColumn();
            $mime_type = $_FILES['attachments']['type'][$i];
            $attachmentQuery = $dbconn->prepare("INSERT INTO msg.email_attachment(email_id,blob_id,mime_type,is_in_line) values($email_id,$blob_id,:mime_type,1)");
            $attachmentQuery->execute(array(
                ':mime_type' => $mime_type
            ));
        }    

this link 可能会从我进入解决方案的地方提供帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-05
    • 2017-11-06
    • 2017-11-02
    • 2023-03-16
    • 1970-01-01
    • 2021-11-18
    • 2013-12-14
    • 2013-09-05
    相关资源
    最近更新 更多