

新闻资讯
技术学院tcpdf 中无法显示反序列化数组所有值,是因为 `writehtml()` 被错误地置于循环外部,导致仅最后一次赋值的 `$f` 被输出;正确做法是将 `writehtml()` 移入 `foreach` 循环内部,确保每个数组元素独立渲染。
在使用 TCPDF 生成 PDF 报表时,若需展示从 MySQL 中读取并反序列化的 PHP 数组(如 serialize() 存储的多值字段),常见错误是逻辑结构错位:反序列化操作与 HTML 输出未一一对应。
原始代码的问题在于:
while($row22 = mysqli_fetch_assoc($resulty)){
$fine_typesR = unserialize($row22['fine_type']); // 每次覆盖,最终只保留最后一行的反序列结果
}
foreach ($fine_typesR as $fine_typet) {
$f = $fine_typet; // 逐个赋值,但未输出
}
$pdf->writeHTML($f, true, false, false, false, ''); // 仅输出最后一次循环的 $f → 单值这导致两个关键缺陷:
$fine_typesR,实际只处理了最后一条数据库记录的反序列化结果;✅ 正确写法应做到 “逐条读取 → 逐项反序列化 → 立即写入 PDF”,推荐结构如下:
$query1 = "SELECT * FROM fine_controls WHERE formid = ?";
$stmt = mysqli_prepare($link, $query1);
mysqli_stmt_bind_param($stmt, "s", $emp_id);
mysqli_stmt_execute($stmt);
$resulty = mysqli_stmt_get_result($stmt);
while ($row22 = mysqli_fetch_assoc($resulty)) {
$fine_typesR = @unserialize($row22['fine_type']);
// 安全检查:确保反序列化成功且为数组
if ($fine_typesR !== false && is_array($fine_typesR)) {
foreach ($fine_typesR as $fine_typet) {
// 可选:添加分隔符或换行提升可读性
$content = htmlspecialchars((string)$fine_typet, ENT_QUOTES, 'UTF-8');
$pdf->writeHTML("● {$content}", true, false, false, false, '');
}
} else {
$pdf->writeHTML("[Invalid serialized data]", true, false, false, false, '');
}
}? 关键改进说明:
⚠️ 注意事项:
通过修正执行顺序与增强健壮性处理,即可稳定、安全地在 TCPDF 中完整呈现反序列化数组的所有条目。