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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 04:09:03