仅显示查询表中存在的MySQL列

时间:2013-07-19 21:07:08

标签: php mysql

我有几个MySQL表,通过下面的代码一次动态地生成一个表的html表。但是,表格没有相同的列。即一个表有一个描述列,而另一个表没有。

以下代码是在脚本中的各个表中包含所有可能的MySQL列的最佳方法,但只显示所选表的MySQL列吗?我觉得我写作" isset"对于每一列。谢谢!

<?php
$query = " SELECT * FROM $tablename ";

$query_select = mysqli_query($con,$query);
while($row = mysqli_fetch_array($query_select)) {
?>

<table>
  <tr>

    <?php if(isset($row['name'])){ ?>
      <td><?php echo $row['name'];?></td>
    <?php } ?>

    <?php if(isset($row['description'])){ ?>
      <td><?php echo $row['description']?></td>
    <?php } ?>

  </tr>
</table>

4 个答案:

答案 0 :(得分:2)

您可能希望使代码适应结果集中的字段:

<?php
$result = mysqli_query($con,$query);
$fields = mysqli_fetch_fields($result);
$myaliases = array(
  'column_id' => 'id'
);
?>
<table>
<tr>
  <?php foreach ($fields as $field): ?>
    <th><?php echo $myaliases[$field->name] ?: $field->name; ?></th>
  <?php endforeach; ?>
</tr>
<?php while($row = mysqli_fetch_array($result)): ?>
<tr>
  <?php foreach ($fields as $field): ?>
    <td><?php echo $row[$field->name]; ?></td>
  <?php endforeach; ?>
</tr>
<?php endwhile; ?>
</table>

评论:

我在上面添加了代码来打印列标题的表格行。

我还提供了一个将字段名称column_id映射到输出中的表格标题id的示例。如果我没有为给定列定义别名,则使用PHP 5.3运算符?:

默认为原始字段名称

您也可以在SQL查询中定义列别名,如SELECT column_id AS id ...

请参阅http://www.php.net/manual/en/mysqli-result.fetch-fields.php

答案 1 :(得分:1)

您可以改为foreach数组。

<?php
$query = " SELECT * FROM $tablename ";   

$query_select = mysqli_query($con,$query);
?>
<table>
<?php while($row = mysqli_fetch_array($query_select, MYSQLI_ASSOC)) { ?>
  <tr>
    <?php foreach($row as $key => $value) { ?>
      <td><?=$value?></td>
    <?php } //Endforeach ?>
  </tr>
<?php } //Endwhile ?>
</table>

如果您需要打印标签,您也可以使用关联数组和其他迭代来完成此操作。

<?php
$query = " SELECT * FROM $tablename ";
$keys = array('name' => 'Name Label', 'description' => 'Description Label');    

$query_select = mysqli_query($con,$query);
$i = 0;
?>
<table>
<?php while($row = mysqli_fetch_array($query_select, MYSQLI_ASSOC)) { ?>
  <?php if($i == 0) { ?>
    <tr>
      <?php foreach($row as $key => $value) { ?>
        <td><b><?=$keys[$key]?></b></td>
      <?php } //Endforeach ?>
    </tr>
  <?php } $i++; //Endif ?>
  <tr>
    <?php foreach($row as $key => $value) { ?>
      <td><?=$value?></td>
    <?php } //Endforeach ?>
  </tr>
<?php } //Endwhile ?>
</table>

答案 2 :(得分:0)

你可以循环查看结果。但是,这不会执行任何检查。最有可能的是,你必须做这样的事情,这取决于你实际从数据库中得到什么。

<?php foreach ($row as $field): ?>
    <?php if ($field): ?>
        <td><?php echo $field; ?></td>
    <?php endif; ?>
<?php endforeach; ?>

编辑:与上面添加的注释保持一致,您只需删除if子句。

答案 3 :(得分:0)

不确定这是否是您所需要的, 但您可以使用索引代替列而不是名称:

<?php
   $query = " SELECT * FROM $tablename ";

    $query_select = mysqli_query($con,$query);
    while($row = mysqli_fetch_array($query_select)) {
      echo $row[0] ." ".$row[1]." ".$row[2]
    }
?>

mysql_fetch_array

可能形成:

<table> 
    <?php 
    $query = " SELECT * FROM $tablename ";
    $query_select = mysqli_query($con,$query);
    while($row = mysqli_fetch_array($query_select)) { ?>
         <tr>
         <?php for(var $i=0; $i < count($row); $i++){ 
              echo "<td>". $row[i] ."</td>";
         } ?>
         </tr>
    <?php } ?>
</table>