[英]Inserting pdf/images in postgresql bytea column in php
我正在尝试将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或损坏的PDF。 在这里实现我想要的最好的方法是什么?
我只是发现自己在做什么错。 如果有人以后遇到类似问题并需要像我这样的帮助,我将在此处发布更新的代码。 克雷格提到,我们没有使用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
));
}
该链接可能对我进入解决方案的地方有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.