PHP页面如何省略数据库返回的空列数据?
问题:如何隐藏Burials数据库查询中空值的列?
我有两个PHP文件,用于按特定顺序调取Burials数据库的数据,但需要省略为空的列。目前数据库数据可正常显示,但所有列都会展示。尝试了多种判断空值的代码片段后均触发500错误,求解决方法。
现有代码
网页端展示文件
<?php if(is_array($fetchData)){ $id=1; foreach($fetchData as $data){ ?> <p></p> <div><strong>Section:</strong> <?php echo $data['Section']??''; ?></div> <div>Lot Number: <?php echo $data['LotNumber']??''; ?></div> <div>Last Name: <?php echo $data['LastName']??''; ?></div> <div>First Name: <?php echo $data['FirstName']??''; ?></div> <div>Middle Initial: <?php echo $data['MiddleInitial']??''; ?></div> <div>Maiden Name:<?php echo $data['MaidenName']??''; ?></div> <div>Suffix: <?php echo $data['Suffix']??''; ?></div> <div>Born: <?php echo $data['Born']??''; ?></div> <div>Died: <?php echo $data['Died']??''; ?></div> <div>Veteran Info:<?php echo $data['VeteranInfo']??''; ?></div> <div>Misc. Info: <?php echo $data['MiscInfo']??''; ?></div> </div></p> <?php $Section;}}else{ ?> <div> <?php echo $fetchData; ?> </div> <div> <?php }?> </div>
数据库查询文件
$db= $conn; $tableName="Burials"; $columns= ['id', 'EndowmentNumber','Letter','LotSize','Section', 'LotNumber','LotOwner','LastName', 'FirstName','MiddleInitial','MaidenName','Suffix', 'Born','Died','VeteranInfo','MiscInfo']; $fetchData = fetch_data($db, $tableName, $columns); function fetch_data($db, $tableName, $columns){ if(empty($db)){ $msg= "Database connection error"; }elseif (empty($columns) || !is_array($columns)) { $msg="columns Name must be defined in an indexed array"; }elseif(empty($tableName)){ $msg= "Table Name is empty"; }else{ $columnName = implode(", ", $columns); $query = "SELECT ".$columnName." FROM $tableName"." ORDER BY Section, LotNumber"; $result = $db->query($query); if($result== true){ if ($result->num_rows > 0) { $row= mysqli_fetch_all($result, MYSQLI_ASSOC); $msg= $row; } else { $msg= "No Data Found"; } }else{ $msg= mysqli_error($db); } } return $msg; } ?>
错误原因
之前的代码触发500错误,核心是语法问题:
- 部分测试代码缺少闭合的
},导致PHP解析失败 - 原HTML存在无效嵌套(多余的
</div></p>标签) - 混合PHP与HTML时,引号或代码拼接逻辑出错
解决方案
数据库查询文件无需修改,仅需调整前端展示逻辑,给每个字段添加非空判断,同时修复HTML结构。
修改后的前端展示代码
<?php if(is_array($fetchData)){ foreach($fetchData as $data){ ?> <div class="burial-entry"> <?php if(!empty(trim($data['Section']))): ?> <div><strong>Section:</strong> <?php echo $data['Section']; ?></div> <?php endif; ?> <?php if(!empty(trim($data['LotNumber']))): ?> <div>Lot Number: <?php echo $data['LotNumber']; ?></div> <?php endif; ?> <?php if(!empty(trim($data['LastName']))): ?> <div>Last Name: <?php echo $data['LastName']; ?></div> <?php endif; ?> <?php if(!empty(trim($data['FirstName']))): ?> <div>First Name: <?php echo $data['FirstName']; ?></div> <?php endif; ?> <?php if(!empty(trim($data['MiddleInitial']))): ?> <div>Middle Initial: <?php echo $data['MiddleInitial']; ?></div> <?php endif; ?> <?php if(!empty(trim($data['MaidenName']))): ?> <div>Maiden Name: <?php echo $data['MaidenName']; ?></div> <?php endif; ?> <?php if(!empty(trim($data['Suffix']))): ?> <div>Suffix: <?php echo $data['Suffix']; ?></div> <?php endif; ?> <?php if(!empty(trim($data['Born']))): ?> <div>Born: <?php echo $data['Born']; ?></div> <?php endif; ?> <?php if(!empty(trim($data['Died']))): ?> <div>Died: <?php echo $data['Died']; ?></div> <?php endif; ?> <?php if(!empty(trim($data['VeteranInfo']))): ?> <div>Veteran Info: <?php echo $data['VeteranInfo']; ?></div> <?php endif; ?> <?php if(!empty(trim($data['MiscInfo']))): ?> <div>Misc. Info: <?php echo $data['MiscInfo']; ?></div> <?php endif; ?> </div> <hr> <!-- 可选:添加分隔线区分不同条目 --> <?php }}else{ ?> <div> <?php echo $fetchData; ?> </div> <?php }?>
关键修改说明
- 非空判断优化:使用
!empty(trim($data['字段名'])),同时过滤空值和纯空格内容,避免无效列显示 - HTML结构修复:移除无效嵌套标签,给每个条目添加统一容器,结构更规范
- 语法简化:采用PHP短条件标签
<?php if(): ?>...<?php endif; ?>,混合HTML时可读性更强,降低语法错误概率 - 冗余代码清理:删除未使用的
$id和$Section变量,减少代码干扰
内容的提问来源于stack exchange,提问作者fiddler
相关产品推荐
相关产品推荐

