我有几个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>
答案 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]
}
?>
可能形成:
<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>