php - 如何在php中正确输出mysql数据库的数据

标签 php mysql pdf

我在通过 php 脚本以 pdf 文档的形式显示 mysql 数据库中的数据时遇到问题。我已经做对了,但是当我运行输出时,我的数据库中的列标题没有显示。此外,我的表格似乎被截断了一半。有人可以帮助我选择正确的维度来显示完整的表记录吗?谢谢。

这是我在 php 页面上以 pdf 格式输出数据的代码

$db_handle = new DBController();

$result =  $db_handle->runQuery('select p.*, s.sname as state_name, 
    l.lname as lga_name from pat_reg p INNER join lga l on p.lga_id = 
    l.lga_id INNER join states s on p.state_id = s.state_id');


$header = $db_handle->runQuery('select p.*, s.sname as state_name, 
    l.lname as lga_name from pat_reg p INNER join lga l on p.lga_id = l.lga_id 
    INNER join states s on p.state_id = s.state_id');



require('fpdf.php');
$pdf = new FPDF();
$pdf->AddPage();
$pdf->SetFont('Arial','B',11);
foreach($header as $heading) {
    foreach($heading as $column_heading)
        $pdf->Cell(80,12,$column_heading,1);
    }
    foreach($result as $row) {
        $pdf->SetFont('Arial','',11);
        $pdf->Ln();
        foreach($row as $column)
            $pdf->Cell(80,12,$column,1);
        }

    $pdf->Output();

这是我的数据库 Controller 类

class DBController {
    private $host = "localhost";
    private $user = "root";
    private $password = "";
    private $database = "patients_db";

    function runQuery($sql) {
        $conn = new mysqli($this->host,$this->user,$this->password,$this->database);
        if ($conn->connect_error) {
            die("Connection failed: " . $conn->connect_error);
        }
        $result = $conn->query($sql);
        if ($result->num_rows > 0) {
            while($row = $result->fetch_assoc()) {
                $resultset[] = $row;
            }
        }
        $conn->close();
        if(!empty($resultset))
            return $resultset;
    }
}

我们将非常感谢任何帮助。

最佳答案

我不熟悉 FPDF,因此我只是按照您提供的代码进行操作。

<?php
$db_handle = new DBController();

$result =  $db_handle->runQuery('select p.*, s.sname as state_name, 
    l.lname as lga_name from pat_reg p INNER join lga l on p.lga_id = 
    l.lga_id INNER join states s on p.state_id = s.state_id');


// Header query removed

require('fpdf.php');
$pdf = new FPDF();
$pdf->AddPage();
$pdf->SetFont('Arial','B',11);

// Add some logic to ensure there is at least one row
if(count($result) > 0){
    // Loop through the keys of the associative array (use the first row)
    foreach($result[0] as $header => $value) {
        $pdf->Cell(80,12,$header,1);
    }
    // Add the line ending here too I assume?
    $pdf->Ln();
    // Loop through rows
    foreach ($result as $row) {
        $pdf->SetFont('Arial','',11);
        $pdf->Ln();
        foreach($row as $column)
            $pdf->Cell(80,12,$column,1);
        }
    }
    // Output PDF
    $pdf->Output();
} else {
    // Error handling
}

这个想法是,我们从数据库对象获得的结果是关联数组,并且每个结果都遵循key => value模式。因此,假设结果中至少有一个条目,我们可以查看第一个条目,循环遍历键并将它们打印为标题。

关于php - 如何在php中正确输出mysql数据库的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46955782/

相关文章:

php - 在 Laravel 中对闭包进行单元测试

php - 断言请求动词是 POST

sql - 如何在 MySQL 中将类型转换为 bigint?

mysql - SQL 查询优化——真的没有什么可以改进的了吗?

java - 如何在 Servlet Response 中设置 pdf 标题

java - 使用 PDFBox 在 PDF 文件中绘制自动调整大小的图像

javascript - Json 编码在 JavaScript 中返回未定义

具有自动生成的主键和唯一键的表上的 Mysql 死锁

pdf - 如何在 pdf 中创建可填写的输入表单?

php - 使用 PHPmailer 发送附件 - 返回 .dat 文件