Firefox下FPDF无法输出MySQL第二查询结果变量的问题求助
问题排查与解决思路
1. 先查MySQL结果集有没有释放
Firefox对PDF字节流的敏感度比Chrome高,要是第一条查询的结果集没释放,可能会卡着后续数据读取。
- 用mysqli的话,第一条查完记得调用
mysqli_free_result()释放结果集;用PDO的话,确保结果集已经遍历完。比如:
// 第一条查询处理 $result1 = mysqli_query($conn, $sql1); $row1 = mysqli_fetch_assoc($result1); mysqli_free_result($result1); // *关键:释放结果集* // 第二条查询 $result2 = mysqli_query($conn, $sql2); $row2 = mysqli_fetch_assoc($result2); $proj_name = $row2['proj_name']; $post_name = $row2['post_name']; $chalan_form = $row2['chalan_form'];
2. 确认第二条查询有没有拿到数据
别光看PDF显示,直接把第二条查询的结果打出来看看:
// 第二条查询后加调试代码 var_dump($row2); die;
要是输出是空的,那就是SQL本身的问题——查下WHERE条件对不对、表名有没有写错,或者数据库权限够不够。
3. 调整FPDF的输出缓存和头信息
Firefox对PDF的缓存和编码卡得严,试试这些操作:
- 输出PDF前清空所有缓冲区:
ob_clean(); // *必须放在Output()之前,清空所有残留输出* $pdf->Output();
- 把HTTP头设置好,别让缓存搞事:
header('Content-Type: application/pdf'); header('Content-Disposition: inline; filename="your_doc.pdf"'); header('Cache-Control: no-cache, no-store, must-revalidate'); header('Pragma: no-cache'); header('Expires: 0');
注意:这些HTTP头必须放在任何输出(包括空格、换行)之前,否则会失效
4. 检查变量赋值有没有问题
说不定是变量没赋上值,或者被后面的代码覆盖了。可以加个兜底赋值:
$proj_name = $row2['proj_name'] ?? '无数据'; $post_name = $row2['post_name'] ?? '无数据'; $chalan_form = $row2['chalan_form'] ?? '无数据';
这样就算字段为空,也会显示“无数据”,能排查是不是字段值为空导致的不显示。
5. 换个FPDF输出方法试试
有时候是Cell()或者Write()的调用细节有问题,换个写法输出变量看看:
// 比如把原来的输出改成这样 $pdf->Cell(0, 10, "项目名称:{$proj_name}", 0, 1); $pdf->Write(10, "岗位名称:{$post_name}\n"); $pdf->Cell(0, 10, "表单编号:{$chalan_form}", 0, 1);
内容的提问来源于stack exchange,提问作者Surf Firs
相关产品推荐
相关产品推荐

