首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用full或partial在表中进行搜索

使用full或partial在表中进行搜索
EN

Stack Overflow用户
提问于 2015-12-03 18:45:41
回答 1查看 46关注 0票数 0

我有一个小问题,当我尝试搜索产品时,用户可以选择单击完整搜索或部分搜索。问题是,当用户点击全搜索并键入某些内容时,整个表格都在打印出来,而产品的单词却不是(我想打印出产品,而不是整个表格),而对于部分搜索,它只是打印出来,它找不到匹配。下面是我目前为止的代码:

代码语言:javascript
复制
// DB configuration //
if (!isset($_POST["searchtype"])) {
echo "<form method='POST'>";
echo "Search for product:<br>";
# using html5 input type search 
echo "<input type='text' name='searchtext' size='15' placeholder='search' results='5' autosave='saved-searches'>";
echo "<br><br>";
echo "Full search";
echo"<input type='radio' value='FULL' checked name='searchtype'><br>";
echo "Partial search ";
echo "<input type='radio' name='searchtype' value='PARTIAL'>";
echo "<br><br>";
echo "<input type='submit' value='Search' name='submit'>";
echo "</form>";


  }
  else {
$searchtext = $_POST["searchtext"]; # Retrieve from the form
$searchtype = $_POST["searchtype"]; # Retrieve from the form
$searchtext_san = sanitize_form_text($searchtext); # Prevents SQL injections!


            try{
    if($DBH == null)
        $DBH = new PDO($dsn, $dbuser, $dbpass);


      $sql = "select name, price, details from products where name='$searchtext_san'";


    if ($searchtype == "FULL"){

        $sql .= " = :searchtext_san";       
        $STH = $DBH->prepare($sql);     
        $STH->execute(array(':searchtext_san' => $searchtext_san));

    }

    if ($searchtype == "PARTIAL"){

        $sql .= " LIKE ':searchtext_san'";
        $STH = $DBH->prepare($sql);
        $STH->execute(array(':searchtext_san' => '%'.$searchtext_san.'%'));
    }


    $STH->setFetchMode(PDO::FETCH_ASSOC);

    $total = $STH->rowCount();
    if ($total == 0){
        echo "Sorry, no matches found!";
    }
    if ($total > 0){
        while ($row = $STH->fetch()){

            echo "{$row["name"]} {$row["price"]} {$row["details"]}<br>";
        }
    } 

    $DBH = null;
     }
    catch (PDOException $e){
    echo '<b>PDOException: </b>',$e->getMessage();
    die();
    }
    }

    function sanitize_form_text($t)
    {
    $t = strip_tags($t);
     $t = ereg_replace("[^A-Za-z0-9@._-]", "", $t);
      return $t;
     }

     ?>
EN

回答 1

Stack Overflow用户

发布于 2015-12-03 19:27:21

尝试使用此选项进行全文搜索

代码语言:javascript
复制
SELECT * FROM articles WHERE MATCH (title,body)
    AGAINST ('+MySQL -YourSQL' IN BOOLEAN MODE); 

Full text Search description

对于部分搜索,您可以使用like

代码语言:javascript
复制
SELECT name FROM products WHERE name  RLIKE '[yourtext]'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34063904

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档