我使用代码创建了简单的搜索页面:
$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初学者(甚至可能更少)所以我将感谢任何其他评论,包括从安全角度来看
答案 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
你会得到确切的免费字。