Как искать несколько слов в базе данных - PullRequest
0 голосов
/ 12 октября 2018

Я не могу понять, как искать (и отображать) несколько слов, которые есть в моей базе данных.Это изображение столбца базы данных

enter image description here

Там все отдельные места: Африка |Уэльс, Великобритания |Стокгольм, Швеция и я хотим найти одинаковые местоположения и отобразить их. Следующий код работает, если в столбце есть одно слово, но нет, если их несколько.

<?php 
        $sessionid = $_SESSION['id'];
        $sql = "SELECT * FROM users WHERE id = '$sessionid';";
        $rsults = mysqli_query($conn, $sql);
        $resultsCheck = mysqli_num_rows($rsults);
        if ($resultsCheck > 0) {
            while ($row = mysqli_fetch_assoc($rsults)){
                $follow = $row['follow'];
                $loc = $row['places'];
            }
        }
    $sql = "SELECT * FROM posts WHERE ext LIKE '$loc' OR username LIKE '$follow' ORDER BY `a_date` DESC LIMIT 4";
    $rsults = mysqli_query($conn, $sql);
    $resultsCheck = mysqli_num_rows($rsults);
    if ($resultsCheck > 0) {
        while ($row = mysqli_fetch_assoc($rsults)){
            echo '<div class="posts">';
            echo '<img class="img"src='.$row['img'].' width="1500px">';
            echo '</div>';
            echo '<div class="contain">';
            echo '<div class="over">';
            echo '<div class="username2">';
            echo '<img src="focus.png" width="25px" height="25px" style="padding-right: 10px;">'.'<a href="./Profile.php?data='.$row['username'].'">'.$row['username'].'</a>'.'<img src="loc.png" width="25px" height="25px" style="padding-right: 5px; padding-left: 10px;">'.'<a href="./Location.php?data='.$row['ext'].'">'.$row['ext'].'</a>';
            echo '</div>';
            echo '<div class="content">';
            echo $row['content'];
            echo '</div>';         
            echo '</div>';
        }
    }

?>

Также я знаю, что это открыто для инъекций sql, это просто доказательство концепции.Спасибо за помощь !!

Ответы [ 3 ]

0 голосов
/ 12 октября 2018

как оператор в mysql поставляется с подстановочными символами, например, '%', '_' и т. Д.

Вы можете использовать запрос mysql, как этот

$sql = "SELECT * FROM posts WHERE ext LIKE '%$loc%' OR username LIKE '$follow' ORDER BY `a_date` DESC LIMIT 4"; 

, например, если $ loc = 'canada ', он вернет все строки, которые имеют' canada 'в своем столбце, независимо от того, содержит ли столбец' canada, abc 'или' abc, canada '

0 голосов
/ 12 октября 2018

Используйте знак "%" при использовании функции LIKE.

$sql = "SELECT * FROM posts WHERE ext LIKE '%$loc%' OR username LIKE '$follow' ORDER BY `a_date` DESC LIMIT 4";

Это позволит вам осуществлять поиск по содержимому поля.

0 голосов
/ 12 октября 2018

При использовании LIKE вы должны добавить знак «%» в начале и / или в конце параметра LIKE, чтобы он не выполнял поиск идентичного термина, кроме одного, начинающегося или заканчивающегося строкой, которую вы указали.Что-то вроде:

$sql = "SELECT * FROM posts WHERE ext LIKE '%$loc%' OR username LIKE '$follow' ORDER BY `a_date` DESC LIMIT 4";

Таким образом, он найдет местоположение, которое содержит ваших критериев поиска, а не только те, идентичные .Здесь «%» заменяет любое количество символов.

Это происходит, если у вас есть один поисковый запрос и у вас есть несколько терминов в столбце базы данных.Но если у вас есть несколько поисковых терминов, вам придется генерировать запрос динамически, добавляя по одному «OR ext LIKE '%$loc%'» для каждого термина.

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