PDO全文搜索-即使db列中只是一部分关键字的关键字,也可以获得结果

时间:2018-07-17 09:52:14

标签: php mysql pdo

我正在尝试使用以下pdo语句搜索数据库的两列:

$search = $pdo->prepare("
    SELECT * FROM books WHERE MATCH (title, author) AGAINST (? IN BOOLEAN MODE);
");

$search->execute(array('*' . $_POST['search'] . '*'));

假设我们的字符串是:

Harry Potter and the Philosopher's Stone by J.K Rowling

(我的书名和作者都存储在使用MyISAM作为存储引擎的数据库中)

如果我搜索Har(关键字Harry的第一部分),我可以返回所需的结果,但是如果我输入rryHarry关键字的最后一部分)我找不到想要的结果。

如果关键字像Harru而不是Harry那样拼写错误(是否使用尽可能少的php),还有没有办法显示我想要的结果?

感谢您的宝贵时间! :D

2 个答案:

答案 0 :(得分:1)

您可以简单地使用MATCH来代替AGAINST LIKE(如果您想一次搜索多个列,则必须绑定该{{1} }设置多个参数,但可以完成工作。

这是您的新声明:

$_POST['search']

答案 1 :(得分:0)

我不知道有关性能的问题,但是您是否尝试过使用正则表达式?

SELECT * from books
WHERE title REGEXP "[[:<:]].*rr.*[[:>:]]"
OR author REGEXP "[[:<:]].*rr.*[[:>:]]";

将得到两个词:哈里,快点,哈尔等...,你可以详细说明

最终检查https://dev.mysql.com/doc/refman/5.6/en/regexp.html