【问题标题】:how to do a full text search with php pdo?如何使用 php pdo 进行全文搜索?
【发布时间】:2015-05-12 06:52:00
【问题描述】:

所以我在当前搜索网站时遇到了问题。所以我目前的搜索将实现这一点; 用户输入“crik”,它将返回“cricket”进行搜索。 但是,如果用户输入“cricket”,它不会返回“cricket”进行搜索。 我怎样才能让它工作? 我当前的 php 代码是;

      $searchQ = $_GET['search'];  
      $ssss = $pdo->prepare('SELECT * FROM listing WHERE name LIKE :search');                                    
      $ssss->bindValue(':search', "%" . $searchQ . "%");        
      $ssss->execute();

我也试过了,但没有返回任何东西;

$ssss = $pdo->prepare('SELECT  * FROM listing WHERE MATCH(name) AGAINST (:search IN BOOLEAN MODE) ');

【问题讨论】:

  • "SELECT * FROM listing WHERE name LIKE '%' + :search + '%' "
  • 这个表是什么存储引擎?你使用全文索引了吗?
  • 我认为存储引擎是 InnoDB,我不知道如何使用全文索引。抱歉,我是 php 新手
  • 另外 xNeyte 感谢您的评论,但它没有用,是因为我不必在该声明之后绑定值吗?
  • 它在这里工作,是的,例如,你必须绑定你的单词'crik'

标签: php mysql search pdo


【解决方案1】:

您可以更改搜索字符串

$searchQ = $_GET['search'];
$searchArr = str_split($searchQ );
$searchQ_new = "";
foreach($searchArr as $alpha)
{
        $searchQ_new .= $alpha . "%";
}

现在您可以使用您的代码通过 $searchQ_new 进行搜索

【讨论】:

    【解决方案2】:

    如果您希望输入 crickets 匹配名称 cricket,您也可以在名称列上使用通配符,例如:

    $ssss = $pdo->prepare("SELECT * FROM listing 
                           WHERE name LIKE :search1 
                           OR :search2 LIKE CONCAT('%', name, '%')");
    $ssss->bindValue(':search1', '%' . $searchQ . '%');
    $ssss->bindValue(':search2', $searchQ);
    

    或者更短更一致(我不确定绑定是否会这样工作,但你可以试试):

    $ssss = $pdo->prepare("SELECT * FROM listing 
                           WHERE name LIKE CONCAT('%', :search, '%')
                           OR :search LIKE CONCAT('%', name, '%')");
    $ssss->bindValue(':search', $searchQ);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-21
      • 1970-01-01
      • 1970-01-01
      • 2015-11-03
      • 1970-01-01
      • 2021-07-12
      • 1970-01-01
      • 2012-07-29
      相关资源
      最近更新 更多