PHP查询MOODLE数据库生成FPDF文件为空、数组无法访问问题求助
代码错误点
- 数组访问逻辑错误:你将每行查询结果
$row追加到$res数组后,$res是二维数组,第一维是数字索引对应第几条数据,直接访问$res['name']不存在对应键,应该直接访问当前循环的$row变量读取字段。 - 未调用FPDF写入方法:你写的
<tr><td>是HTML代码,FPDF不会自动解析HTML内容写入PDF,必须调用$pdf->Cell()方法将数据写入PDF对象。 - 循环提前终止:你在while循环内直接执行了
die(),程序直接中断,后续循环、PDF输出逻辑完全不会执行。 - 多余输出破坏PDF格式:提前输出Moodle页头、后续输出页脚的操作会追加到PDF文件内容中,导致PDF损坏无法正常打开。
- 表头未换行:你写完表头后没有触发换行,第一条数据会和表头重叠。
修正后可用代码
<?php /** * @package tool_report * @author Marko * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ require('../blocks/bbbreport/fpdf/fpdf.php'); require_once(__DIR__ . '/../config.php'); defined('MOODLE_INTERNAL') || die(); global $CFG; $conn = new mysqli($CFG->dbhost, $CFG->dbuser, $CFG->dbpass, $CFG->dbname); if ($conn->connect_errno) { echo $conn->connect_error; return; } $sql = "SELECT * FROM mdl_bigbluebuttonbn"; $result = $conn->query($sql); $pdf = new FPDF(); $pdf->AddPage(); $pdf->SetFont('Courier','B',16); // 输出表头,最后一个参数设为1代表输出后换行 $pdf->Cell(50,10,'Course ID', '1', '0', 'C'); $pdf->Cell(50,10,'Course TYPE', '1', '0', 'C'); $pdf->Cell(50,10,'Course COURSE', '1', '0', 'C'); $pdf->Cell(50,10,'Course NAME', '1', '1', 'C'); // 设置内容字体 $pdf->SetFont('Courier','',14); if ($result->num_rows > 0) { while ($row = $result->fetch_assoc()) { // 直接读取当前行字段写入PDF $pdf->Cell(50,10,$row['id'], '1', '0', 'C'); $pdf->Cell(50,10,$row['type'], '1', '0', 'C'); $pdf->Cell(50,10,$row['course'], '1', '0', 'C'); $pdf->Cell(50,10,$row['name'], '1', '1', 'C'); } } $conn->close(); // 直接输出PDF,不要输出其他任何内容 $pdf->Output(); ?>
内容的提问来源于stack exchange,提问作者Marco Medic
相关产品推荐
相关产品推荐

