我有这个代码,希望将我输入的数据转换为数组,然后应该在数据库中搜索数组。该数据库包含由爬行器在网站中扫描的单词行。
数组代码似乎不起作用:( 我的查询如下:
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" );
答案 0 :(得分:1)
您的问题标题为“多项搜索引擎”,但此代码(SQL部分意味着经过深思熟虑的索引)无法容纳多个术语。事实上,PHP代码是乱码。它首先使用if表达式设置$ k的值。然后使用三元运算符将其设置为相同的值。
您尚未提供您正在使用的搜索字词的示例,也没有提供从中生成的查询。你也没有提供“似乎没有工作”的任何解释。
我建议你去写一个编写爬虫和搜索数据库的人 - 他们会解释说如果你有多个术语,那么你需要以非常不同的方式将文字值拼接到查询中或加载它们(暂时)进入表并与搜索查询连接。他们还应该用一条大鱼打你,并告诉你去学习SQL注入。
e.g。
...
$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";
}