You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 09:21:03