MYSQL/PHP:选择单词的一部分或精确匹配

MYSQL/PHP:选择单词的一部分或精确匹配,mysql,sql,select,Mysql,Sql,Select,试图为我的问题寻找答案。如果有人问过类似的问题,请指给我看 我有一个表单,用户可以在一个或多个文本字段中键入搜索词 然后传递到SQL语句: WHERE st.Description LIKE '%$Description%' AND st.Number LIKE '%$Number%' AND st.Color LIKE '%$Color%' 这将返回单词包含用户输入的任何匹配项 如果用户使用引用语(如“搜索词”),是否有任何方法可以搜索精确匹配 最佳实践是什么?在执行查询之前,您可以从php

试图为我的问题寻找答案。如果有人问过类似的问题,请指给我看

我有一个表单,用户可以在一个或多个文本字段中键入搜索词

然后传递到SQL语句:

WHERE st.Description LIKE '%$Description%'
AND st.Number LIKE '%$Number%'
AND st.Color LIKE '%$Color%'
这将返回单词包含用户输入的任何匹配项

如果用户使用引用语(如“搜索词”),是否有任何方法可以搜索精确匹配


最佳实践是什么?

在执行查询之前,您可以从php代码中执行该操作

让我们假设serch单词位于名为
$keyword

<?php 
if(substr($keyword, 0, 1) == '"' && substr($keyword, -1, 1) ==='"'){
    $search = ' = ' . substr($keyword, 1, -1);
}else{
    $search = ' LIKE ' . '%' . $keyword . '%';
}
不要忘记使用预先准备好的语句来防止
SQL注入


对于性能问题,如果您要查找确切的单词,请不要使用
LIKE
关键字,使用
=
比较符号在执行查询之前,您可以从php代码中执行该操作

让我们假设serch单词位于名为
$keyword

<?php 
if(substr($keyword, 0, 1) == '"' && substr($keyword, -1, 1) ==='"'){
    $search = ' = ' . substr($keyword, 1, -1);
}else{
    $search = ' LIKE ' . '%' . $keyword . '%';
}
不要忘记使用预先准备好的语句来防止
SQL注入

对于性能问题,如果您正在寻找一个确切的单词,请不要使用
LIKE
关键字,而是使用
=
比较符号

如果用户使用引用语(如“搜索词”),是否有任何方法可以搜索精确匹配

如果删除引号,它会搜索:
WHERE st.Description,比如“%search word%”
。当提供多个单词作为搜索词时,表示您认为当前正在搜索是否存在无序的单词。事实并非如此。假定给定一个包含多个单词的短语,您要搜索所有单词:

WHERE st.Description LIKE '%search%'
AND st.Description LIKE '%word%'
什么是最佳实践

与您当前所做的工作相比还有很长的路要走:使用全文索引或构建您自己的关键字搜索

如果用户使用引用语(如“搜索词”),是否有任何方法可以搜索精确匹配

如果删除引号,它会搜索:
WHERE st.Description,比如“%search word%”
。当提供多个单词作为搜索词时,表示您认为当前正在搜索是否存在无序的单词。事实并非如此。假定给定一个包含多个单词的短语,您要搜索所有单词:

WHERE st.Description LIKE '%search%'
AND st.Description LIKE '%word%'
什么是最佳实践


与您当前所做的工作还有很长的距离:使用全文索引或构建您自己的关键字搜索。

您可以在查询本身中处理此逻辑,或者更好地在PHP代码中处理它。如果搜索字符串包含引号,则使用不同的
表达式,如不带通配符的
%
。您的意思是在输入文件中循环,如果包含引号,则使用and If语句吗?如果是这样,将表达式放入php变量中?我的意思是检查php代码中的输入,并适当地处理引号。基本上,如果有引号,你需要
像'search string'
,但是如果没有引号,你需要
像'%search string%'
。是的,PHP如何检测一个单词/单词是否被引号包围?编辑:找到预匹配项('/^([“\']).*\1$/m',$string);使用“%”$Description。“%”您可以在查询本身中处理此逻辑,或者最好在PHP代码中处理它。如果搜索字符串包含引号,则使用不同的
表达式,如不带通配符的
%
。您的意思是在输入文件中循环,如果包含引号,则使用and If语句吗?如果是这样,将表达式放入php变量中?我的意思是检查php代码中的输入,并适当地处理引号。基本上,如果有引号,你需要
像'search string'
,但是如果没有引号,你需要
像'%search string%'
。是的,PHP如何检测一个单词/单词是否被引号包围?编辑:找到preg_匹配项('/^([“\']).*\1$/m',$string);使用“%”$Description。“%”我试图使用它,但也包括'LIKE'表达式作为$search='LIKE%'。$searchOpts['Description']“%”;但它不起作用。我将此添加到
$search
变量中。因此,在sql查询中是否真的必须使用
,我猜您的意思是
我试图使用它,但还将'LIKE'表达式包括为$search='LIKE%'。$searchOpts['Description']“%”;但它不起作用。我将其添加到
$search
变量中。另外,我想您的意思是在sql查询中是否真的必须使用