2

我有这段代码,它希望将我输入的单词转换成一个数组,然后应该在数据库中搜索数组。该数据库具有由爬虫在网站中扫描的单词的行。

数组代码似乎不起作用:(我的查询如下:

        if( isset($_POST['keyword']) ){
        $k = $_POST['keyword'];
        }else{
        $k = '';
        }
        $k = ( isset($_POST['keyword']) )? trim($_POST['keyword']) : '';
        $terms = (strlen($k) > 0)? explode(' ', $k) : Array();

          $keyword = addslashes( $k);
          $results = addslashes( $_POST['results'] );

          /* Execute the query that performs the actual search in the DB: */
             $result = mysql_query(" SELECT p.page_url AS url,
                       COUNT(*) AS occurrences 
                       FROM page p, word w, occurrence o
                       WHERE p.page_id = o.page_id AND
                       w.word_id = o.word_id AND
                       w.word_word = \"$keyword\"
                       GROUP BY p.page_id
                       ORDER BY occurrences DESC
                       LIMIT $results" ); 
4

1 回答 1

1

您的问题的标题是“多词搜索引擎”,但是这段代码(SQL 部分暗示了一个经过深思熟虑的索引)不能容纳多个词。事实上,PHP 代码是乱码。它首先使用 if 表达式设置 $k 的值。然后它使用三元运算符将其设置为相同的值。

您没有提供您正在使用的搜索词的示例,也没有提供从中生成的查询。您也没有提供“似乎不起作用”的任何解释。

我建议您与编写爬虫和搜索数据库的人交谈 - 他们会解释说,如果您有多个术语,那么您需要以非常不同的方式将文字值拼接到查询中或加载它们(临时)进入一个表并将其与搜索查询连接起来。他们还应该给你一巴掌,告诉你去学习SQL注入。

例如

...
$qry=searchQuery($_POST['keywords'], $dbh);
if ($qry) {
    $limit = (integer) $_POST['results'] ? (integer) $_POST['results'] : 20;
    $qry.=" LIMIT $limit";
    result=mysql_query($qry, $dbh);
} else {
    ...
    exit;
}
...

function searchQuery($keywords $dbh)
{
   if (''==$keywords) return false;
   $keywords=str_replace('  ', ' ', $keywords); // remove consecutive spaces
   $keywords=str_replace('  ', ' ', $keywords); // cos you might have an odd number of consecutive spaces
   $parts=explode(' ', $keywords);
   foreach ($parts as $x=>$word) {
       $parts[$x]="'" . mysql_real_escape_string($word, $dbh) . "'";
   }
   $keywords=implode(',', $parts);
   return " SELECT p.page_url AS url,
                   COUNT(*) AS occurrences 
                   FROM page p, word w, occurrence o
                   WHERE p.page_id = o.page_id AND
                   w.word_id = o.word_id AND
                   w.word_word in ($keywords)
                   GROUP BY p.page_id
                   ORDER BY COUNT(DISTINCT w.word_id)*COUNT(*) DESC";

}
于 2012-11-24T23:42:00.507 回答