php - 如何使用 MySQL 在 PHP 上进行全字搜索

标签 php mysql pdo sql-like

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

$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/

相关文章:

javascript - Node.JS 中的 MySQL 请求总是返回旧数据集

Mysql累计总和和按月分组年

php - 多标签搜索查询仅通过 1 个标签匹配获得结果

php - 使用 SSL/TLS HTTPS 将 PDF 表单提交到 PHP 页面?

php - "Body Onload"发送 "ScrollHeight"在 Chrome 和 Safari 中无法正常工作

python - SQLAlchemy - 如何使用连接选择 x.id IS NOT NULL AS?

php - 在 PHP 类中建立变量作用域?

php - 在 OS X 中为捆绑的 PHP 安装扩展

php - MySQL查询结果波动

javascript - 如何使用php,mysql在上传之前预览图像