我正在尝试使用以下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
的第一部分),我可以返回所需的结果,但是如果我输入rry
( Harry
关键字的最后一部分)我找不到想要的结果。
如果关键字像Harru
而不是Harry
那样拼写错误(是否使用尽可能少的php),还有没有办法显示我想要的结果?
感谢您的宝贵时间! :D
答案 0 :(得分:1)
您可以简单地使用MATCH
来代替AGAINST
LIKE
(如果您想一次搜索多个列,则必须绑定该{{1} }设置多个参数,但可以完成工作。
这是您的新声明:
$_POST['search']
答案 1 :(得分:0)
我不知道有关性能的问题,但是您是否尝试过使用正则表达式?
SELECT * from books
WHERE title REGEXP "[[:<:]].*rr.*[[:>:]]"
OR author REGEXP "[[:<:]].*rr.*[[:>:]]";
将得到两个词:哈里,快点,哈尔等...,你可以详细说明