如何用完整的单词在MySQL上搜索PHP

时间:2014-01-17 20:57:38

标签: php mysql pdo sql-like

我使用代码创建了简单的搜索页面:

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

它有效但是如果DB列“tags”有例如单词“freelance”而我输入了“free”这个词我得到了结果,但我不应该。它必须只搜索完整的单词。我曾尝试用MATCH(文本)反对全文搜索,但因为停用词而不适合我

编辑:对不起,我没有澄清:如果数据库专栏中有“自由网页开发”这个词,我输入了“自由职业者”或“网络开发”或“自由开发”[使用str_replace('', '%')]我得到了我需要的结果。但如果我输入“免费”(即数据库中的单词为no),我就不会得到任何结果,但我会再次获得成功结果。

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

我只是HTML / CSS编程和PHP初学者(甚至可能更少)所以我将感谢任何其他评论,包括从安全角度来看

2 个答案:

答案 0 :(得分:0)

我相信你需要

WHERE `tags` IN $keywords

使用$ keywords作为implode(',', $keyArray),即I.e。格式为('free', 'busy', 'other')

请注意有关SQL注入的警告,并参阅Select from mysql table WHERE field='$array'?了解常规方法

答案 1 :(得分:0)

找到你需要的确切单词

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

你会得到确切的免费字。