This question already has answers here:
Search for “whole word match” in MySQL
                                
                                    (6个答案)
                                
                        
                                6年前关闭。
            
                    
我使用以下代码创建了简单的搜索页面:

$keywords = str_replace(' ','%',$_POST['keywords']);
$stmt = $pdo->query("SELECT `text` FROM `records` WHERE `tags` LIKE '%$keywords%'");


它可以工作,但是如果DB列“ tags”具有例如“ freelance”一词,而我输入了“ free”一词,则会得到结果,但我不会。它只能按完整词搜索。我曾尝试使用MATCH(text)AGAINST进行全文搜索,但由于停用词,它不适合我

编辑:对不起,我没有弄清楚:如果DB列中有单词“ freelance web development”,我输入了“ freelance”或“ web development”或“ freelance development” [通过使用str_replace('','%' )]我得到所需的结果。但是,如果我输入“免费”(即数据库中的单词“ no”),我将不会获得任何结果,但会再次获得成功的结果。

此外,我通过foreach回应了结果。如果我用IN($ array)更改了代码,即使我输入了“自由职业者”,也没有任何结果,可能是因为foreach

我仅是HTML / CSS和PHP初学者(甚至更少)的编码人员,所以我将感谢您提供任何其他意见,包括从安全角度出发

最佳答案

要找到确切的单词,您需要给这样一个空格

 $stmt = $pdo->query("SELECT `text` FROM `records`
                      WHERE `tags` LIKE '% $keywords %' OR `tags` LIKE '$keywords %' OR `tags` LIKE '% $keywords'");
                                          ^---------^---spaces here


您将获得准确的免费单词。

09-30 17:11