我正在尝试使用PDO显示存储过程中的html表。结果集包含许多需要导出到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>";
?>
这个问题与存储过程无关,因为它适用于从数据库返回的任何数据。
最方便的方法是先获取数据,从第一行获取列名,然后打印数据。
此外,对于这个查询,使用prepare-execute是不合理的
$data = $db->query( "CALL spalldetails" )->fetchAll(PDO::FETCH_ASSOC);
$column_names = array_keys($data[0]);
这里有输出前的列名,可以使用foreach()而不是while()
我建议您不要在处理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>";