如何在php中推荐朋友


how to suggest friends in php

我想随机向用户推荐一些朋友,无论建议和当前会话用户之间是否有共同的朋友。

以下是我尝试过的:

$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

  1. id
  2. 添加_by_id
  3. add_to_id
  4. added_on
  5. 已接受

用户

  1. id
  2. 名称
  3. u名称
  4. profile_pic
  5. 电子邮件
  6. 密码
  7. 性别

我没有得到正确的结果,这表明我的那些朋友也已经是我的朋友了(当前会话用户)。

我们不能确定到底出了什么问题,因为您没有向我们展示表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>";