0

我有几个 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

4 回答 4

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

于 2013-07-19T21:20:11.390 回答
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>
于 2013-07-19T21:19:12.727 回答
0

您可以遍历结果。但是,这不会执行任何检查。最有可能的是,您必须执行类似的操作,具体取决于您实际从数据库中获取的内容。

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

编辑:与您在上面添加的评论保持一致,您可以简单地删除 if 子句。

于 2013-07-19T21:15:03.300 回答
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> 
于 2013-07-19T21:17:32.520 回答