如何从PDO的fetchAll结果获取列名?

时间:2019-11-19 08:40:17

标签: html mysql pdo html-table

我创建了一个表单来从数据库中搜索表,用户可以在其中选择要查看的表。下面是我的表单代码。

<form action="search.php" method="post"> 
<label class="col-lg-3 control-label">Search Table:</label> 
<select class="form-control" name="table1"> 
<option value="Country_Table">Country</option> 
<option value="Flag_Table">Flag</option> 
<option value="Region_Table">Region</option> </select>
<button id="search" type="submit" class="btn btn-primary">Search</button>
</form>

if(isset($_POST['search'])){ 
$table1 = $_POST['table1'];
$sql = "SELECT * FROM $table1"; 
$stmt = $dbcon->prepare($sql); 
$stmt->execute();
$result = $stmt->fetchAll();

假设用户选择“国家”并显示结果,我使用以下代码:

<table class='table'>
<tr>
<th>ID</th>
<th>Area</th>
<th>Color</th>
</tr>

<?php foreach($result as $readrow){ ?>
<div class="table-row">
<td><?php echo $readrow['id'];?></td>
<td><?php echo $readrow['area'];?></td>
<td><?php echo $readrow['color'];?></td>

问题是,如果用户选择“标记”或“区域”,如何显示表格结果?有什么办法,表格可以显示自己的标题?

1 个答案:

答案 0 :(得分:2)

有很多重复的问题,但是所有答案都是出于任何原因,提供了涉及运行额外查询等的复杂解决方案。

解决方案就在这里:$result变量中已经具有所有列标题

$headerNames = $result ? array_keys($result[0]) : [];

现在您可以遍历$coulmnNames来获取表头。

<table class='table'>
  <tr>
  <?php foreach($coulmnNames as $name): ?>
    <th><?= $name ?></th>
  <?php endforeach ?>
  </tr>
  <?php foreach($result as $row){ ?>
    <tr class="table-row">
      <?php foreach($result as $value){ ?>
        <td><?= $value ?></td>
    </tr>
  <?php endforeach ?>
</table>

重要提示。永远不要直接从用户输入中插入变量。对于表名,您必须 whitelist them first