2016-03-30 6 views
0

PDOを使用してストアドプロシージャからhtmlテーブルを表示しようとしています.ResultsetにはExcelにエクスポートする必要があるカラムとローが多数含まれています。 しかし、最初の行に列名を入れる必要がありますが、下のコードでどのようにできるのでしょうか?どんな助け?PHPを使用してhtmlテーブルに表示するためのストアドプロシージャからカラム名を取得

$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>"; 
?> 

答えて

1

それはに適用だとして質問は、ストアドプロシージャとは何の関係もありませんデータベースから返されたデータ。

最も便利な方法は、最初にデータをフェッチし、最初の行から列名を取得し、次にデータを印刷することです。

のほか、実行準備の使用は、このクエリここ

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

あなたはforeachのを使用して作ることができ、出力前に列名を持っている()の代わりに、しばらく()

+0

私はそれぞれの行にを印刷する必要があるので、私はwhile($ arrValues = $ q-> fetch(PDO :: FETCH_ASSOC))を使用しています。 – Wings2fly

+0

これを 'foreach($ data as $ arrValues)'に変更して、残りのコードを同じにすることができます –

-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>"; 
+0

このコードがしますのために正当化されません列名が多すぎます。 –