【发布时间】:2013-08-16 02:08:26
【问题描述】:
我是新手。我已经搜索了数周的 Stackoverflow,试图找到高级搜索的代码。
终于创建了我自己的。它工作得很好。我在此处列出它以供可能想要使用它的其他人使用。
问题是:
当没有选择 item_category 时,我默认为
*,但它不起作用。 item_category 是搜索所需的唯一变量?我需要担心消毒或黑客注射吗?
完全匹配似乎不起作用。它可能在 100 个单词中搜索“FREE”,但找不到匹配项。有什么想法吗?
-
关于可靠性和速度问题有什么建议吗?
$ANDOR = param('andor');#创建 AND OR 搜索 if($ANDOR eq ""){ $ANDOR="AND";}
如果($item_category){ $item_category = "$item_category"; } 其他{ $item_category=" * "; } $statement .= "item_category LIKE '$item_category' ";
如果($item_state){ $statement .= "$ANDOR item_state LIKE '$item_state'"; } 如果($item_city){ $statement .= "$ANDOR item_city LIKE '$item_city'"; } 如果($db_id){ $statement .= "$ANDOR db_id = '$db_id'"; }
$keywords=param('keywords');
如果($关键字) { if(param('searchmatch') eq "exact") { $statement .= " $ANDOR item_name = \"$keywords\" OR item_desc = \"$keywords\" 或 item_desc2 = \"$keywords\" ";#
} 别的 { $statement .= " $ANDOR "; 我的@keywords = split(/ /,$keywords);
foreach my $keyword(@keywords) { $statement .= " item_name LIKE '%$keyword%' OR item_desc LIKE '%$keyword%' OR item_desc2 LIKE '%$keyword%' "; }} }
$date_begin=param('date_begin'); 如果($date_begin){ $statement .= " $ANDOR 修改时间 > '$date_begin'"; }
如果($用户){ $statement .= " $ANDOR user LIKE '$user' "; }
$price_low=param('price_low'); $price_high=param('price_high'); 如果 (($price_low) && ($price_high)){ $statement .= " $ANDOR item_price BETWEEN '$price_low' AND '$price_high' "; } elsif (($price_low) && ($price_high eq "")){ $statement .= " $ANDOR item_price BETWEEN '$price_low' AND * "; } elsif (($price_high) && ($price_low eq "")){ $statement .= " $ANDOR item_price BETWEEN '0' AND '$price_high' "; } 别的 { $statement .= "";
}
我的 $sth = $dbh->prepare(qq(SELECT * FROM table WHERE $statement )) 或死 $DBI::errstr; $sth->执行(); 而 ((我的 (@rows)) = $sth->fetchrow_array) { $total_row_count= $sth->rows; $database_rows = 加入(“\|”,@rows); 推(@database_rows,$database_rows); }
【问题讨论】:
标签: mysql perl search-engine