如何通过PHP脚本过滤MySQL数据,使好友列表不展示当前登录用户自身名称
实现方案
首先确认你存储已登录用户标识的Session键名,常规场景下会存储用户ID或者用户名,以下假设你存储的用户名字段为$_SESSION['username'],对应用户表名为users、用户名字段为username,共有两种实现方式,优先推荐SQL过滤的方案,性能更优。
方案1:SQL查询阶段直接过滤(推荐)
直接在查询语句中新增排除条件,避免后续在PHP层循环判断,执行效率更高,代码示例如下:
<?php // 读取Session必须先调用session_start,放在页面所有输出之前执行 session_start(); // 未登录判断,避免Session不存在报错,可替换为你自己的跳转逻辑 if (!isset($_SESSION['username'])) { header('Location: login.php'); exit; } $current_username = $_SESSION['username']; // 数据库连接,可替换为你自己的PDO/mysqli连接逻辑 $conn = mysqli_connect('数据库地址', '数据库账号', '数据库密码', '数据库名'); // 预处理语句避免SQL注入 $stmt = mysqli_prepare($conn, "SELECT username FROM users WHERE username != ?"); mysqli_stmt_bind_param($stmt, "s", $current_username); mysqli_stmt_execute($stmt); $result = mysqli_stmt_get_result($stmt); // 遍历输出其他用户列表 while ($row = mysqli_fetch_assoc($result)) { echo '<p>' . htmlspecialchars($row['username']) . '</p>'; // 此处可扩展添加好友按钮等业务逻辑 } // 释放资源 mysqli_stmt_close($stmt); mysqli_close($conn); ?>
如果你的Session中存储的是用户ID,只需要把对应判断字段替换为用户ID即可,逻辑完全一致。
方案2:PHP循环阶段过滤
如果你不方便修改原有SQL查询语句,也可以在循环输出阶段加判断跳过当前登录用户:
<?php session_start(); $current_username = $_SESSION['username'] ?? ''; // 假设你已经查询到全量用户列表存储在$all_users数组中 foreach ($all_users as $user) { // 和当前登录用户一致则跳过输出 if ($user['username'] === $current_username) { continue; } // 正常输出其他用户信息 echo '<p>' . htmlspecialchars($user['username']) . '</p>'; } ?>
注意事项
- 调用
session_start()读取Session数据需要放在页面所有输出之前执行,否则会报header已发送的错误。 - 数据库查询优先使用预处理语句,禁止直接拼接用户输入到SQL语句中,避免SQL注入风险。
- 输出用户名等用户可控内容时,建议用
htmlspecialchars()做转义处理,避免XSS攻击。
内容的提问来源于stack exchange,提问作者klausmaq
相关产品推荐
相关产品推荐

