如何用FPDF渲染MySQL查询数组?仅打印首元素问题排查
问题分析与修复方案
核心错误1:PDF输出后跳转Header导致输出中断
代码在$pdf->Output();之后调用了header("Location:..."),这是严重错误:
Output()会直接向浏览器发送PDF二进制内容,此时HTTP响应头已发送完成,后续调用header()会触发PHP"headers already sent"错误,同时截断PDF输出,导致浏览器仅能接收到部分内容(通常是第一条数据)。- 生成PDF与页面跳转是互斥操作,必须删除该行跳转代码。
核心错误2:内容超出页面范围未处理
每个Cell高度设为50mm,加上Ln()的行高,从Y=115的位置开始,很快会超出A4纸张高度(297mm),后续内容会被挤出页面,看起来像是没有遍历数据。
潜在错误:POST参数名拼写错误
$_POST['seraching_group']存在拼写错误(应为searching_group),如果前端传递的参数名是正确的searching_group,会导致查询条件绑定空值,返回结果集不符合预期。
修复后的完整代码
<?php mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); include("conection.php"); require('fpdf/fpdf.php'); // 修复参数名拼写错误,增加空值判断 $searchGroup = $_POST['searching_group'] ?? ''; if(empty($searchGroup)) { die("分组参数不能为空"); } $stmt = $con->prepare("SELECT student_qr FROM students WHERE student_group = ? AND student_credits > 0"); $stmt->bind_param("s", $searchGroup); $stmt->execute(); $result = $stmt->get_result(); $pdf = new FPDF('P','mm','A4'); $pdf->AddPage(); // 设置标题样式与位置 $pdf->SetFont('Arial', 'B', 11); $pdf->SetTextColor(255,255,255); $pdf->SetFillColor(0,134,255); $pdf->SetXY(10, 15); $pdf->Cell(191.5,5,utf8_decode("Alumns"),0,1,'L',true); // 重置内容单元格样式 $pdf->SetFont('Arial', '', 10); $pdf->SetTextColor(0,0,0); $pdf->SetFillColor(240,240,240); $pdf->SetXY(10, 25); while($row = $result->fetch_assoc()) { // 自动分页判断(预留20mm页边距) if($pdf->GetY() > 277) { $pdf->AddPage(); // 新页面重新设置标题 $pdf->SetFont('Arial', 'B', 11); $pdf->SetTextColor(255,255,255); $pdf->SetFillColor(0,134,255); $pdf->SetXY(10, 15); $pdf->Cell(191.5,5,utf8_decode("Alumns"),0,1,'L',true); // 重置内容样式 $pdf->SetFont('Arial', '', 10); $pdf->SetTextColor(0,0,0); $pdf->SetFillColor(240,240,240); $pdf->SetXY(10, 25); } // 调整单元格高度为10mm,Cell第5个参数为1已自动换行,无需额外Ln() $pdf->Cell(110,10,$row["student_qr"], 1,1,'C', true); } $pdf->Output(); mysqli_close($con);
额外说明
- 调整标题位置到页面顶部,避免空间浪费;
- 增加分页逻辑,内容接近页面底部时自动新增页面;
- 重置内容单元格样式,避免继承标题的蓝色填充与白色文字;
- 调整单元格高度为10mm,符合常规文本显示需求;
- 增加参数空值判断,避免无效查询。
内容的提问来源于stack exchange,提问作者GibranQ
相关产品推荐
相关产品推荐

