PHP如何将MySQL查询结果首行输出到页面标题或顶部单独区块
PHP实现联系人查询结果首行单独置顶展示
核心逻辑:查询完成后先取出结果集的第一行单独渲染到顶部区域,利用fetch_assoc()会自动移动结果集指针的特性,后续循环直接输出剩余数据即可,避免重复。
完整修改代码示例
1. 数据查询与首行预处理
$sql = "SELECT * FROM people"; $first_row = null; if( isset($_GET['search']) ){ // 安全优化建议:生产环境请替换为预处理语句,避免SQL注入风险 $name = mysqli_real_escape_string($con, htmlspecialchars($_GET['search'])); $name2 = mysqli_real_escape_string($con, htmlspecialchars($_GET['search2'])); $sql = "SELECT * FROM people WHERE first_name ='$name' AND last_name= '$name2'"; } $result = $con->query($sql); // 先判断是否有结果,取出第一行数据 if($result && $result->num_rows > 0){ $first_row = $result->fetch_assoc(); } ?>
2. 顶部区域渲染首行数据
<!-- 你需要的顶部div/span展示区域 --> <div class="result-top-header" style="padding:10px;background:#f5f5f5;margin-bottom:15px;"> <?php if($first_row): ?> <span>匹配到的首位联系人:<?php echo $first_row['first_name'] . ' ' . $first_row['last_name']; ?>,联系方式:<?php echo $first_row['contact']; ?></span> <!-- 可根据需求自定义展示的首行字段 --> <?php else: ?> <span>未查询到匹配的联系人信息</span> <?php endif; ?> </div>
3. 表格区域渲染剩余查询结果
这里分两种场景按需选择:
- 场景A:首行仅在顶部展示,表格内不重复显示
<table border="1" cellpadding="8" cellspacing="0"> <tr> <th>ID</th> <th>名</th> <th>姓</th> <th>地址</th> <th>联系方式</th> </tr> <?php if($result && $result->num_rows > 0){ // 直接遍历剩余结果即可,第一行已经被取出不会重复输出 while($row = $result->fetch_assoc()){ ?> <tr> <td><?php echo $row['people_id']; ?></td> <td><?php echo $row['first_name']; ?></td> <td><?php echo $row['last_name']; ?></td> <td><?php echo $row['address']; ?></td> <td><?php echo $row['contact']; ?></td> </tr> <?php } } ?> </table>
- 场景B:首行在顶部展示的同时,表格内也保留该条数据
只需要在表格循环前先输出第一行即可,修改表格部分代码如下:
<table border="1" cellpadding="8" cellspacing="0"> <tr> <th>ID</th> <th>名</th> <th>姓</th> <th>地址</th> <th>联系方式</th> </tr> <?php if($first_row){ // 先输出已经取出的第一行到表格 ?> <tr> <td><?php echo $first_row['people_id']; ?></td> <td><?php echo $first_row['first_name']; ?></td> <td><?php echo $first_row['last_name']; ?></td> <td><?php echo $first_row['address']; ?></td> <td><?php echo $first_row['contact']; ?></td> </tr> <?php // 再遍历剩余结果 while($row = $result->fetch_assoc()){ ?> <tr> <td><?php echo $row['people_id']; ?></td> <td><?php echo $row['first_name']; ?></td> <td><?php echo $row['last_name']; ?></td> <td><?php echo $row['address']; ?></td> <td><?php echo $row['contact']; ?></td> </tr> <?php } } ?> </table>
安全优化提示
原有代码的拼接SQL方式存在SQL注入风险,建议使用预处理语句实现查询,示例:
if(isset($_GET['search'])){ $stmt = $con->prepare("SELECT * FROM people WHERE first_name = ? AND last_name = ?"); // 绑定参数,ss代表两个字符串类型参数 $stmt->bind_param("ss", $_GET['search'], $_GET['search2']); $stmt->execute(); $result = $stmt->get_result(); }
内容的提问来源于stack exchange,提问作者terry
相关产品推荐
相关产品推荐

