使用通配符和PDO执行全文搜索

时间:2013-11-13 18:28:01

标签: php mysql pdo jquery-ui-autocomplete

尝试使用MySQL的MATCH AGAINST全文搜索,其中我的搜索词由jQueryUIs自动完成小部件提供为$_GET['term']。此外,我希望使用PHP的PDO来逃避这个术语。最后,我想使用通配符,但是,如果在提供的术语中对每个单词使用通配符太多,我可以将它应用到术语中的最后一个单词。我的尝试如下,适用的表格式如下。问题是,当在术语中仅提供部分单词时,它不会返回任何记录。有什么建议?谢谢

public function searchHelp()
{
    header('Content-Type: application/json');
    $this->dontCache();
    try
    {
        $sql ='SELECT id,name AS value FROM topics WHERE MATCH(keywords,name,content) AGAINST(? IN NATURAL LANGUAGE MODE)';
        $stmt = dbHelp::db()->prepare($sql);
        $stmt->execute(array($_GET['term'].'*'));
        echo(json_encode($stmt->fetchAll(PDO::FETCH_ASSOC)));
    }
    catch(PDOException $e){library::sql_error($e,$sql);}   
}

CREATE TABLE `topics` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `topics_id` int(11) NOT NULL,
  `name` varchar(45) NOT NULL,
  `content` text,
  `list_order` tinyint(4) NOT NULL DEFAULT '0',
  `keywords` text,
  `display_list` tinyint(4) DEFAULT '1',
  PRIMARY KEY (`id`),
  KEY `fk_topics_topics` (`topics_id`),
  FULLTEXT KEY `name` (`keywords`,`name`,`content`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

0 个答案:

没有答案