无论建议与当前session_user之间是否有共同朋友,我都想向用户推荐一些朋友。
以下是我的尝试:
$sess = htmlspecialchars(mysqli_real_escape_string($con, $_SESSION['user_id']));
$qet = mysqli_query($con, "SELECT user.id AS id, user.name AS name, user.u_name AS u_name, user.profile_pic AS profile_pic
FROM user INNER JOIN user_friend ON (user.id = user_friend.add_by_id) OR (user.id = user_friend.add_to_id)
WHERE (user_friend.add_to_id != '$sess' or user_friend.add_by_id != '$sess') AND (user.id != '$sess')
ORDER BY RAND() LIMIT 1");
我的表结构:
user_friend
- ID
- add_by_id
- add_to_id
- ADDED_ON
- 接受
醇>
用户
- ID
- 名称
- u_name
- profile_pic
- 电子邮件
- 密码
- 性别
醇>
我没有得到正确的结果,它告诉我那些已经和我成为朋友的朋友(当前的session_user)。
答案 0 :(得分:1)
我们无法确定究竟出了什么问题,因为您没有向我们展示表格user
和表格user_friend
的结构,但是,根据给出的信息推断,ON ...
和WHERE ...
语句不正确。我建议你在sql中使用NOT IN
子句。这些行更多的东西(但可能不同,因为我们没有确切的表格格式!):
SELECT * FROM user WHERE id NOT IN (SELECT friends_id FROM user_friends WHERE id = :sess)
同样,如果你想要确切的SQL语句,我们需要知道你的表的结构。如果你更新你的问题,我会很高兴地更新我的答案:)。
重要:强>
您之前的代码不安全,也不实用。您错误地使用htmlspecialchars()
,并且为了防止sql注入,正确的方法是使用预准备语句和参数绑定。以下是使用MySQL(PDO)(首选方法)完成的示例:
$sess = $_SESSION['user_id'];
$sql =
"SELECT
user.id AS id,
user.name AS name,
user.u_name AS u_name,
user.profile_pic AS profile_pic
FROM
user
INNER JOIN
user_friend
ON (user.id = user_friend.add_by_id) OR (user.id = user_friend.add_to_id)
WHERE
(user_friend.add_to_id != :sess or user_friend.add_by_id != :sess)
AND (user.id != :sess)
ORDER BY RAND() LIMIT 1"
$stmt = $conn->prepare($sql); //preparing the statement
$stmt->bindParam(':sess', $sess); //binding the parameter
$stmt->execute();
稍后当您决定输出所选数据时,您应该使用htmlspecialchars()
,如下所示:
echo "Friends: ".htmlspecialchars($data)."<br>";