如何在php中推荐朋友

时间:2016-05-10 16:45:35

标签: php mysql mysqli

无论建议与当前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

  
      
  1. ID
  2.   
  3. add_by_id
  4.   
  5. add_to_id
  6.   
  7. ADDED_ON
  8.   
  9. 接受
  10.   

用户

  
      
  1. ID
  2.   
  3. 名称
  4.   
  5. u_name
  6.   
  7. profile_pic
  8.   
  9. 电子邮件
  10.   
  11. 密码
  12.   
  13. 性别
  14.   

我没有得到正确的结果,它告诉我那些已经和我成为朋友的朋友(当前的session_user)。

1 个答案:

答案 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>";