如何使用php进行多个关键字搜索

时间:2014-04-23 07:43:01

标签: php mysql

我有一个tb_user数据库,我想使用关键字进行搜索。如果通过文本字段输入这些关键字。如果用户在文本字段中输入一个搜索词,我可以显示结果但是如果用户在文本区域中输入用逗号分隔的多个关键字,我不知道如何执行查询。请帮忙

我的表中有一列包含类似的值:

user_current_location

  1. 德里,比哈尔邦,孟买
  2. 诺依
  3. 普纳,德里
  4. 果阿,向上,西姆拉
  5. 德里
  6. 可能有更好的方法,但如果我必须用现有的知识来实现​​它,我会做这样的事情:

    $wordString = $_POST['search'];
    
    if (strpos($wordString, ",")){
    
      $words = explode(",", $wordString);
      $sql = "SELECT * FROM tb_user WHERE";
    
      foreach($words as $word){
        $sql.=" field LIKE '%$word%' OR";
      }
    
      $sql = substr($sql, 0, -3);
    } 
    else {
      /* NO comma separated values, build normal query */
      $sql = "SELECT * FROM tb_user WHERE user_current_location LIKE '%$wordString%'";
    }
    

    如果用户输入'delhi,noida',则生成的查询将为:

    "SELECT * FROM tb_user 
    WHERE user_current_location LIKE '%delhi%' 
    OR user_current_location LIKE '%noida%'"
    

2 个答案:

答案 0 :(得分:1)

或者您可以使用REGEX

SELECT *
  FROM tb_user 
 WHERE user_current_location REGEXP "*delhi*|*noida*";

答案 1 :(得分:1)

首先我必须提一下,根据您使用什么来访问数据库(PDO或mysql_ *),您应该安全地防止sql注入,并且根据这一点,您将在foreach中进行适当的转义环。

除了安全性之外,我认为按照您的方式进行操作没有任何问题(除了可能会过滤空字符串,因此像delhi,这样的内容与所有内容都不匹配(%dehli%%%)。< / p>

E.g:

foreach ($words as $word)
{
    $sql .= " field LIKE '%" + mysql_real_escape_string($word) + "%' OR ";
}

(实际上建议使用PDO,但我认为你可能正在使用mysql_ *函数)