You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过view.php显示MySQL中以longblob格式存储的PDF文件

现有代码核心问题

  • 前端跳转view.php时没有传递学生唯一标识、要查询的PDF字段名,后端无法定位到对应记录的blob数据
  • view.php仅设置了响应头,完全没有编写从MySQL查询对应longblob数据并输出的逻辑,浏览器拿到的是空内容,自然无法解析PDF
  • 缺少Content-Disposition、Content-Length等必要头字段,浏览器无法正常识别文件加载规则

修正后的代码

前端表格代码

<td><?php echo $row["Stud_ID"]; ?></td>
<td><?php echo $row["Course"]; ?></td>
<td><?php echo $row["Lastname"]; ?></td>
<td><?php echo $row["Firstname"]; ?></td>
<!-- 跳转时传递学生ID和要查看的PDF字段名 -->
<td><a href="view.php?stud_id=<?php echo $row['Stud_ID']; ?>&field=PSA" target="_blank"><?php echo $row["PSA"]; ?></a></td>
<td><?php echo $row["Form137"]; ?></td>
<td><?php echo $row["Picture"]; ?></td>

view.php代码

<?php
// 1. 接收并校验参数,防止SQL注入
$stud_id = intval($_GET['stud_id']);
$allow_fields = ['PSA', 'Form137']; // 允许查询的PDF字段白名单
$field = in_array($_GET['field'], $allow_fields) ? $_GET['field'] : 'PSA';

// 2. 连接MySQL(请替换为你自己的数据库连接配置)
$conn = mysqli_connect('数据库地址', '用户名', '密码', '数据库名');
if (!$conn) {
    die('数据库连接失败');
}

// 3. 查询对应记录的blob数据
$sql = sprintf("SELECT `%s` FROM 学生表名 WHERE Stud_ID = %d", $field, $stud_id);
$res = mysqli_query($conn, $sql);
$row = mysqli_fetch_assoc($res);
$pdf_content = $row[$field];

// 4. 输出响应头和PDF内容,注意header前不能有任何输出(包括空格、换行)
header('Content-Type: application/pdf');
header('Cache-Control: no-cache, no-store, must-revalidate');
header('Pragma: no-cache');
header('Content-Length: ' . strlen($pdf_content));
// 如果需要强制下载而不是在线预览,把下面这行注释打开
// header('Content-Disposition: attachment; filename="'.$stud_id.'_'.$field.'.pdf"');

// 直接输出PDF二进制内容,不要输出任何其他内容
echo $pdf_content;

// 结束后立刻终止程序,避免后续额外输出污染PDF
exit;
?>

注意事项

  • view.php的PHP开始标签<?php前面不能有任何空格、换行、HTML内容,结束标签?>后面也不能有任何多余字符,否则会破坏PDF的二进制结构导致无法打开
  • 如果存储PDF到数据库时做过base64编码,输出前需要先调用base64_decode()解码
  • 请将代码中的数据库地址、用户名、密码、数据库名、学生表名替换为你自己的实际配置

内容的提问来源于stack exchange,提问作者AlksAndTrsh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 02:12:01