PHP实现登录用户是否关注搜索用户的判定问题求助
问题分析与代码修正
首先看你遇到的问题:follower字段始终是空数组,没有返回预期的true/false,主要是这几个核心问题:
- 字段名匹配错误:你的粉丝表实际字段是
follower_user_id,但代码里误用了follower_id作为查询条件,根本查不到有效数据 - 逻辑判断完全搞反:你需要判断的是「登录用户(
$userid)是否关注了当前遍历的用户」,但现有代码里的判断逻辑是拿被关注ID和当前用户ID对比,完全不符合需求 - 变量类型与赋值混乱:你把
$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
相关产品推荐
相关产品推荐

