如何在数据库中搜索多个单词

时间:2018-10-12 06:36:47

标签: php html mysql database

我似乎无法弄清楚如何搜索(和显示)数据库中的多个单词。这是数据库列的图像

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 :(得分:1)

使用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%'”。

答案 1 :(得分:1)

mysql中的

like运算符附带通配符,例如'%','_'等

您可以像这样使用mysql查询

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

例如,如果$ loc ='canada',则无论该列包含'canada,abc'还是'abc,canada',它将返回其列中具有'canada'的所有行

答案 2 :(得分:0)

使用LIKE功能时,请使用“%”符号。

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

这将使您可以搜索字段的内容。