[英]How to multiple keyword search with php
我有一个tb_user数据库,我想使用关键字进行搜索。 如果通过文本字段输入这些关键字。 如果用户在文本字段中输入一个搜索词,则可以显示结果,但是如果用户在文本区域中输入多个由逗号分隔的关键字,我不确定如何执行查询。 请帮忙
我的表中的列包含这样的值:
user_current_location
也许有更好的方法,但是如果我必须使用现有知识来实现,我会做这样的事情:
$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.