0

我正在使用 PHP 循环从 MySQL 数据库中填充 HTML 表。我使用 PDO 将 SQL 查询的结果提取到 $result 中:

$result = $pdo->query($sql);    

(其中 $sql 是一个 SELECT 查询)

然后我正在构建一个这样的 HTML 表:

if($result !== false) 
        {

            $html_table = '
            <table border="1" cellspacing="0" cellpadding="2">
                <tr>';

            foreach($titles as $title)
            {
            $html_table .= "<th> $title </th>";                          
            }

            $html_table .='</tr> <tr>';

            foreach( $result->fetchAll() as $row ) 
            {
                $html_table .= '<tr>' . "\n";

                foreach( $row as $col ) 
                {
                $html_table .= '<td>' .$col. '</td>';
                }
                $html_table .= '</tr>' . "\n";
            }
        }

这个想法是在 $result 中获取每条记录,将它们定义为一个名为 $row 的数组,然后遍历每条记录并以这种方式构建表。

问题是,表格出现错误 - 我无法辨别模式,但有几个单元格偶尔重复(相同的数据并排出现)。

知道我在哪里出错了吗?谢谢你。

4

2 回答 2

0

想出了这个!:)

如果有帮助,我会在这里为其他人发布我的解决方案。

问题是您可以在 PDO 中 fetchAll 的不同方式。在我上面的代码中,我只是使用默认的 fetchAll()

这会产生这样的数组数组:

Array
(
    [0] => Array
        (
            [NAME] => pear
            [0] => pear
            [COLOUR] => green
            [1] => green
        )

    [1] => Array
        (
            [NAME] => watermelon
            [0] => watermelon
            [COLOUR] => pink
            [1] => pink
        )

)

请注意,对于每个列名称,有两个条目,一个用于名称,一个用于索引编号(不确定这是否正确,但您可以看到发生了什么)。

出于我的目的,我需要每列一个条目,因此切换到:

$result->fetchAll(PDO::FETCH_ASSOC)

这给出了这个数组:

Array
(
    [0] => Array
        (
            [NAME] => pear

            [COLOUR] => green

        )

    [1] => Array
        (
            [NAME] => watermelon

            [COLOUR] => pink

        )

)

并解决了我的问题。

于 2012-10-21T18:17:45.673 回答
0

这是一些获取列标题的代码:

    $colcount = $result->columnCount();
    for ($i = 0; $i < $colcount; $i++){
        $meta = $result->getColumnMeta($i)["name"];
        echo('<th>' . $meta . '</th>');
    }
于 2015-10-08T10:43:26.850 回答