我正在尝试使用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>";
?>
答案 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>";