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

PHP实现登录用户是否关注搜索用户的判定问题求助

问题分析与代码修正

首先看你遇到的问题:follower字段始终是空数组,没有返回预期的true/false,主要是这几个核心问题:

  1. 字段名匹配错误:你的粉丝表实际字段是follower_user_id,但代码里误用了follower_id作为查询条件,根本查不到有效数据
  2. 逻辑判断完全搞反:你需要判断的是「登录用户($userid)是否关注了当前遍历的用户」,但现有代码里的判断逻辑是拿被关注ID和当前用户ID对比,完全不符合需求
  3. 变量类型与赋值混乱:你把$followers初始化为数组,但实际需要布尔值,而且找到匹配后没有及时终止循环,导致逻辑混乱

修正后的完整代码

<?php
// 验证登录用户的有效性
$sql = "SELECT * FROM `users` where user_id='$userid' AND session_id='$session_id'";
$result = mysqli_query($conn, $sql);
if ($result->num_rows > 0) {
    $user_array = array();
    // 查询系统所有用户
    $user_query = "SELECT * FROM users";
    $user_query_result = mysqli_query($conn, $user_query);
    if ($user_query_result->num_rows > 0) {
        while ($row_users = $user_query_result->fetch_assoc()) {
            $current_user_id = $row_users['user_id'];
            $user_name = $row_users['fast_name'] . ' ' . $row_users['last_name'];
            $user_pic_path = $row_users['user_pic_path'];
            
            // 核心逻辑:判断登录用户是否关注当前遍历的用户
            $is_followed = false;
            // 修正字段名与查询条件:被关注者是当前用户,关注者是登录用户
            $followed_query = "SELECT 1 FROM followers WHERE user_id = $current_user_id AND follower_user_id = $userid LIMIT 1";
            $followed_result = mysqli_query($conn, $followed_query);
            // 只要查到匹配记录,就说明已关注
            if ($followed_result->num_rows > 0) {
                $is_followed = true;
            }
            
            // 获取当前用户的图片列表
            $images = array();
            $images_query = "SELECT image_path FROM image where user_id = $current_user_id";
            $image_result = mysqli_query($conn, $images_query);
            while ($image_row = $image_result->fetch_assoc()) {
                $images[] = $image_row['image_path'];
            }
            
            // 组装单个用户的完整数据
            $user_item = array(
                "user_name" => $user_name,
                "user_pic_path" => $user_pic_path,
                "follower" => $is_followed, // 返回布尔值true/false
                "images" => $images
            );
            $user_array[] = $user_item;
        }
        
        // 组装最终响应数据
        $response['session'] = TRUE;
        $response['status'] = TRUE;
        $response['msg'] = "user data find successfully";
        $response['user_detail'] = $user_array;
        echo json_encode($response);
    }
}
?>

关键修改点说明

  • 修正查询逻辑:把粉丝表的查询条件调整为user_id = $current_user_id AND follower_user_id = $userid,精准定位「登录用户是否关注当前用户」,同时添加LIMIT 1提升查询效率,找到匹配结果后立即终止查询
  • 变量类型规范化:用$is_followed初始化为false,查到匹配记录就设为true,完全符合返回布尔值的需求
  • 优化数据组装:去掉了冗余的数组嵌套操作,直接将单个用户信息存入$user_array,避免了之前的结构混乱
  • 性能优化:查询粉丝表时只查询1(无需返回全字段),查询图片时只取image_path,减少不必要的数据传输

另外,建议你后续使用预处理语句来防止SQL注入,比如:

// 示例:用预处理语句验证登录状态
$stmt = $conn->prepare("SELECT * FROM users WHERE user_id = ? AND session_id = ?");
$stmt->bind_param("is", $userid, $session_id);
$stmt->execute();
$result = $stmt->get_result();

这种方式能有效避免SQL注入风险,让代码更安全健壮。

内容的提问来源于stack exchange,提问作者All World

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:11:36