我使用以下代码创建了简单的搜索页面:
$keywords = str_replace(' ','%',$_POST['keywords']);
$stmt = $pdo->query("SELECT `text` FROM `records` WHERE `tags` LIKE '%$keywords%'");
它可以工作,但是如果数据库列“标签”具有例如单词“自由职业者”并且我输入了单词“自由”,我会得到结果,但我不应该。它必须仅按完整单词进行搜索。我尝试过使用 MATCH(text) AGAINST 进行全文搜索,但由于停用词,它不适合我
编辑:抱歉我没有澄清:如果数据库列有例如“自由职业网络开发”一词,我输入“自由职业”或“网络开发”或“自由职业开发”[通过使用 str_replace(' ', '%')] 我得到了我需要的结果。但是如果我输入“free”(即数据库中没有这个词),我应该不会得到任何结果,但我会再次得到成功结果。
此外,我通过 foreach 回显结果。如果我用 IN ($array) 更改代码,即使我输入“freelance”,也不会得到任何结果,可能是因为 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
您将获得准确的单词“免费”。
关于php - 如何使用 MySQL 在 PHP 上进行全字搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21195720/