使用FPDF导出数据库数据为PDF遇报错,请求技术协助
我来帮你一步步拆解这两个问题,逐个解决:
第一个错误:
mysql_fetch_array() 参数类型不匹配 这个警告的核心原因是:你现在用的数据库连接方式(大概率是mysqli或者PDO),执行查询后返回的是对象类型,但mysql_fetch_array()是早已被废弃的老版mysql扩展函数,它只认mysql_query()返回的资源类型,自然就报错了。
解决步骤:
- 如果你用的是
mysqli扩展(最常见的情况),把mysql_fetch_array()替换成mysqli_fetch_array(),记得把数据库连接对象作为第一个参数传入。比如原来的代码:
要改成:$result = mysqli_query($conn, $sql); while($row = mysql_fetch_array($result)) { // 你的逻辑 }$result = mysqli_query($conn, $sql); // 第二个参数可选,指定返回关联数组、索引数组或两者兼具 while($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) { // 你的逻辑 } - 如果你用的是PDO扩展,那就改用PDO的
fetch()或fetchAll()方法:
额外提醒:$stmt = $pdo->query($sql); while($row = $stmt->fetch(PDO::FETCH_ASSOC)) { // 你的逻辑 }mysql_*系列函数在PHP 7已经被完全移除,建议彻底切换到mysqli或PDO,避免后续更多兼容性问题。
第二个错误:FPDF无法发送PDF文件(已有内容输出)
FPDF生成PDF时,要求输出PDF之前不能有任何其他内容发送到浏览器——包括空格、换行、echo输出,甚至PHP的警告/错误信息(比如第一个警告就属于提前输出的内容),这些都会破坏PDF的头信息,导致报错。
解决步骤:
- 优先修复第一个警告:第一个错误的警告文本已经是提前输出的内容,先把它解决掉,这个问题可能就自动消失大半了。
- 检查文件的空白字符:确保
Department.php的<?php标签前没有任何空格、换行,甚至是隐藏的BOM字节顺序标记;文件结尾的?>标签如果不需要的话可以直接删掉,避免意外输出空白。 - 开启输出缓冲:如果还是存在隐藏的输出,可以在文件最顶部添加输出缓冲代码,把所有输出暂时缓存起来,直到FPDF完成输出:
然后在FPDF输出PDF的代码后面加上:ob_start(); // 开启缓冲ob_end_flush(); // 输出缓冲内容 - 临时关闭错误输出(调试用):如果还需要排查其他隐藏输出,可以临时关闭PHP的错误显示:
不过更推荐的是从根源修复错误,而不是隐藏错误,这样能避免潜在的其他问题。error_reporting(0); ini_set('display_errors', 0);
内容的提问来源于stack exchange,提问作者Ares_SVX
相关产品推荐
相关产品推荐

