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
相关产品推荐
相关产品推荐

