从存储过程中获取列名,以便使用php在html表中显示

时间:2016-03-30 09:15:45

标签: php mysql pdo

我正在尝试使用PDO从存储过程中显示html表.Resultset包含许多需要导出到excel的列和行。 但我需要将列名称放在第一行,如何在下面的代码中实现?有什么帮助吗?

   $q= $db->prepare( "CALL spalldetails" );
   $q->execute();

   while ($arrValues = $q->fetch(PDO::FETCH_ASSOC))
   {
        echo "<tr>";
        foreach ($arrValues as $key=>$value)
        {   
            $column_names[]=$key;
    ?>

      <td><?=$value?></td>  
       <?
         }
     echo "</tr>";

        }

以下代码显示列名,但我希望它是表的顶行。

echo "<tr>";
foreach ($column_names as $name)
{ ?>
    <td>
    <?=$name?>
    </td>
<? 
}
 echo "</tr>";
?>

2 个答案:

答案 0 :(得分:2)

该问题与存储过程无关,因为它适用于从数据库返回的任何数据。

最方便的方法是先获取数据,从第一行获取列名,然后打印数据。

此外,对于此查询,使用prepare execute是不合理的

$data = $db->query( "CALL spalldetails" )->fetchAll(PDO::FETCH_ASSOC);
$column_names = array_keys($data[0]);

这里你有输出前的列名,你可以使用foreach()代替while()

答案 1 :(得分:-1)

我建议不要在处理for循环时立即打印输出,而是创建一个字符串以便稍后输出。这可以简单地完成:(请注意,下面是未经测试的航空代码,但为了向您展示我的意思)

$q= $db->prepare( "CALL spalldetails" );
    $q->execute();

    while ($arrValues = $q->fetch(PDO::FETCH_ASSOC))
{
    $tablestring .= "<tr>";
    foreach ($arrValues as $key=>$value){   
        $column_names[]=$key;
       $tablestring .= "<td>".$value."</td>";
     }
 $tablestring .= "</tr>";
}

$headstring .= "<tr>";
foreach ($column_names as $name)
{   $headstring .= "<td>".$name."</td>";
    }
 $headstring .= "</tr>";

echo "<table>".$headstring.$tablestring."</table>";