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

PHP通过ODBC连接SQL Server,FPDF输出查询结果至PDF仅显示结果数

问题分析与解决:PHP ODBC+FPDF生成PDF只显示结果数量而非内容

嘿,我一眼就看出问题所在了——你用的odbc_result_all()函数根本不是用来获取查询内容的!

核心原因

odbc_result_all($rs, $style)这个函数的作用是直接把查询结果输出成HTML表格到浏览器,而它的返回值是查询到的记录行数,不是你想要的表格内容。所以你把$print传给FPDF的Write()或Text()时,其实是把记录数(一个数字)写进了PDF,这就是为什么你只看到数量看不到内容。

正确的实现方式:手动遍历查询结果

我们需要放弃odbc_result_all(),自己循环读取每一行数据,然后用FPDF的API把内容(比如表格)写入PDF。这里给你一个完整的示例:

// 执行SQL查询
$rs = odbc_exec($connection, $query);

// 第一步:获取表头字段名(用来做表格标题)
$fieldCount = odbc_num_fields($rs);
$headers = [];
for ($i = 1; $i <= $fieldCount; $i++) {
    $headers[] = odbc_field_name($rs, $i);
}

// 第二步:设置PDF字体和样式
$pdf->SetFont('Arial', 'B', 12);
$pdf->SetFillColor(211, 211, 211); // 对应你原来的d3d3d3背景色
$pdf->SetCellPadding(3); // 对应你原来的cellpadding=3

// 第三步:写入表头
foreach ($headers as $header) {
    // 调整Cell的宽度(第一个参数)适配你的字段数量和PDF页面宽度
    $pdf->Cell(40, 10, $header, 1, 0, 'C', true);
}
$pdf->Ln(); // 换行到下一行

// 第四步:遍历每一行数据写入PDF
$pdf->SetFont('Arial', '', 10);
while ($row = odbc_fetch_array($rs)) {
    foreach ($row as $value) {
        $pdf->Cell(40, 10, $value, 1);
    }
    $pdf->Ln();
}

// 最后输出PDF
$pdf->Output('result.pdf', 'I'); // 'I'表示在浏览器打开,'D'表示下载

补充说明

  • 你之前网页能看到内容,是因为odbc_result_all()在执行时自动把HTML表格输出到了浏览器,但这个过程和你赋值给$print的变量无关——$print始终只是记录数。
  • 如果需要调整表格样式(比如字段宽度、对齐方式、颜色),可以调整Cell()方法的参数,比如对齐方式(第五个参数)、是否填充背景(第七个参数)等。

内容的提问来源于stack exchange,提问作者Romain

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:24:12