繁体   English   中英

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

[英]How to multiple keyword search with php

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

我的表中的列包含这样的值:

user_current_location

  1. 德里,比哈尔邦,孟买
  2. 诺伊达
  3. 浦那,德里
  4. 果阿,向上,西姆拉
  5. 新德里

也许有更好的方法,但是如果我必须使用现有知识来实现​​,我会做这样的事情:

$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%'"

或者您可以使用REGEX

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

首先,我不得不提到,根据您用来访问数据库的内容(PDO或mysql_ *),应确保它对sql注入安全,并取决于在foreach循环中是否进行了适当的转义。

除了安全性,我认为按照自己的方式进行操作没有任何问题(除了可能过滤空字符串,使诸如delhi,东西无法匹配所有内容( %dehli%%% )。

例如:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM