如何使用php下载保存在mysql数据库中的pdf作为MEDIUMBLOB数据


How to download a pdf saved in a mysql database as a MEDIUMBLOB data using php?

我已经将一个pdf文件保存在mysql数据库中作为MEDIUMBLOB文件。我使用以下代码下载它。下载的文件与原始文件的大小和文件类型相同,但无法正常打开。可能是什么问题以及如何解决它?

$emp_no=55;
$DOB="2014-09-03";
$query="SELECT file_name, file_type, file_size, file_data FROM document WHERE emp_no=$emp_no AND DOB='$DOB'";
$retval=mysqli_query($non,$query);
$row=mysqli_fetch_array($retval,MYSQL_ASSOC);
$file_name=$row['file_name'];
$file_type=$row['file_type'];
$file_size=$row['file_size'];
$file_data=$row['file_data'];
header("Content-length: $file_size");
header("Content-type: application/pdf");
header("Content-Disposition: attachment; filename=$file_name");
echo $file_data;

打开下载的.pdf 在记事本中,您会看到文件顶部有 PHP 错误通知,这些通知会损坏任何下载的文件。

一些解决方案:

  • 修复它们;-)
  • 通过 PHP 代码第一行中的error_reporting(E_ERROR);关闭E_NOTICE错误报告
  • 构建您自己的自定义错误报告机制,并关闭通过ini_set('display_errors', 0);将错误打印到浏览器,这样它们就不会弄乱下载的文件

您可以修复这些问题,也可以添加一个

这是我

的最终工作解决方案:

<?php
header ('Content-type: text/html; charset=UTF-8');
//Get id from form (POST)
$order = $_POST['Order'];
//Set connection
$servername = "mysql.yourserver.com";
$username = "yourusername";
$password = "yourpassword";
$dbname = "yourdatabasename";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die("Error: " . $conn->connect_error);
} 
//Retrieve data from db
$result = $conn->query('SELECT * FROM Table WHERE id='.$order);
//Set rows to variables
while($row = $result->fetch_assoc()) {
  $size = $row["size"];
  $type = $row["type"];
  $filename = $row["filename"];
  $content = $row["content"];
}
//Get file
header("Content-disposition: attachment; filename=$filename");
header("Content-length: $size");
header("Content-type: $type");
echo $content;
//End connection
$conn->close();
?>