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


get column names from stored procedure for displaying in html table using php

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