2017-03-01 45 views
0
  • 首先我有一個對應於users表標識符的id,並通過get來傳遞給php。
  • 我想檢查:nickname.users,friends.id_friends,friends.id_adder,friends.id_added和friends.id_tipus,但以最好的方式檢查friends.id_adder,friends.id_added並正確獲取暱稱。我製作的代碼有效。

我的查詢:清除查詢mysql查詢中的朋友的方法

SELECT users.nickname, 
      friends.id_friends, friends.id_adder, friends.id_added, friends.id_tipus 
      FROM friends 
      LEFT JOIN users ON users.id=friends.id_added OR users.id=friends.id_adder 
      WHERE 
      (friends.id_adder='".$id."' AND (SELECT nickname FROM users WHERE id='".$id."')<>users.nickname) 
      OR 
      (friends.id_added='".$id."' AND (SELECT nickname FROM users WHERE id='".$id."')<>users.nickname); 
+1

你的問題是什麼?查詢是否工作? – Barmar

+0

@Barmar是的,但我正在學習mysql,我不知道是否有更好的選擇去做 –

+1

跳過頁面的第一件事:不要包含這樣的'$ id':它會讓你的代碼變得脆弱到SQL注入。改用準備好的語句。 – trincot

回答

2

我會變換查詢到這一點:

SELECT u1.nickname, 
      friends.id_friends, 
      friends.id_adder, 
      friends.id_added, 
      friends.id_tipus 
FROM  users u1 
LEFT JOIN friends ON u1.id IN (friends.id_added, friends.id_adder) 
LEFT JOIN users u2 ON u2.id IN (friends.id_added, friends.id_adder) 
        AND u2.nickname <> u1.nickname 
WHERE  u1.id = ? 

你不應該注入$id值到您的SQL字符串,因爲這使你的代碼容易SQL injection。請使用prepared statements

+0

我可以使用http://php.net/manual/es/function.mysql-real-escape-string.php來阻止sql注入嗎? –

+1

你應該離開'mysql_'函數:它們已經被棄用了好幾年了,它們自PHP 7以來就不被支持了。使用PDO或者'mysqli'。至於那個函數,它[對於任何SQL來說都不是簡單的證明](http://stackoverflow.com/a/5741264/5459839)。 – trincot

+0

我可以很好的實施mysqli預防工作,非常感謝 –