запрос указывает на нежелательное событие - PullRequest
0 голосов
/ 26 августа 2018

Я хочу создать раздел поиска друзей в стиле фейсбук.Но я просто хочу привести своих друзей в таблицу друзей.Мои таблицы в этом DEMO .

    $result = mysqli_query($this->db,"        
SELECT U.username
     , U.userid
     , U.userfullname
     , UT.username
     , UT.userid
     , UT.userfullname
     , F.role 
  FROM friends F 
  JOIN users U 
    ON F.userone = U.userid
  JOIN users UT 
    ON F.usertwo = UT.userid
 WHERE U.username Like '%$key' 
    OR UT.userfullname Like '$key%' 
    OR UT.username Like '$key%' 
    OR UT.userfullname Like '%$key' 
    OR UT.username Like '$key' 
    OR UT.userfullname Like '$key'  
   AND F.userone = '$uid' 
   AND (F.role='fri' OR F.role = 'flwr')
 ORDER 
    BY F.userone 
 LIMIT 10
") or die(mysqli_error($this->db));
    while($row=mysqli_fetch_array($result,MYSQLI_ASSOC)) {
         $data[]=$row;
    }
    if(!empty($data)) { 
     return $data;
    } 

Идентификатор пользователя ($uid) ищущего человека - 1, а ключ, например, azizиз-за azizs 'userid - это 2, и если вы проверите таблицу друзей, userone (1) и usertwo (2) являются друзьями там.Как мы можем знать, что они друг, потому что role это fri.Вы также можете увидеть это на странице DEMO .

Теперь, в чем проблема!Проблема в том, что $ uid (1) ищет своего друга в запросе, показывающем также role = 'me', но я просто хочу показать F.role='fri' OR F.role = 'flwr'.В чем проблема в моем запросе.

1 Ответ

0 голосов
/ 26 августа 2018

Как насчет ...

SELECT U.username
     , U.userid
     , U.userfullname
     , UT.username
     , UT.userid
     , UT.userfullname
     , F.role 
  FROM friends F 
  JOIN users U 
    ON F.userone = U.userid
  JOIN users UT 
    ON F.usertwo = UT.userid
 WHERE (
       U.username Like '%$key' 
    OR UT.userfullname Like '$key%' 
    OR UT.username Like '$key%' 
    OR UT.userfullname Like '%$key' 
    OR UT.username Like '$key' 
    OR UT.userfullname Like '$key' 
     ) 
   AND F.userone = '$uid' 
   AND F.role IN('fri','flwr')
 ORDER 
    BY F.userone 
 LIMIT 10

Обратите внимание, что вы остаетесь открытыми для инъекций при таком подходе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...