Вставка pdf / изображений в столбец postgresql bytea в php

1

Я пытаюсь вставить PDF или изображение как blob в postgresql bytea. Вот что я пробовал

$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, либо испорченный. Каков наилучший способ достичь того, чего я хочу здесь?

  • 0
    Используйте PDO и не используйте pg_escape_bytea или pg_unescape_bytea . Просто передайте PDO::PARAM_LOB .
  • 0
    Спасибо Крейг, ваш комментарий помог мне.
Теги:
pdf
pdo

1 ответ

2

Я просто узнал, что я делаю неправильно. Я отправляю обновленный код здесь, если кто-то попадает в подобную проблему позже, и мне нужна помощь. Как уже упоминалось Craig мы не должны использовать pg_escape_bytea или addslashes. Все, что нам нужно, - просто открыть файл с помощью 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
            ));
        }    

эта ссылка может помочь, когда я попал в решение.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню