高级搜索mysql perl
我是个新手。我已经搜索Stackoverflow几个星期了,试图找到高级搜索的代码。 终于创造了我自己。它工作得很好。我在这里列出它是为了其他可能想使用它的人。 问题是: 当没有选择任何项目类别时,我默认为*但它不起作用。 item_category是搜索所需的唯一变量 我是否需要关注消毒或黑客注射 精确匹配似乎不起作用。它可能正在搜索100个单词的“FREE”,但找不到匹配项。有什么想法吗 对可靠性和速度问题有什么建议吗 $ANDOR=参数'ANDOR';创建AND或OR搜索 如果$ANDOR等式{$ANDOR=AND;} 如果$item\u类别{ $item\u category=$item\u category; }else{$item_category=*;} $statement.=项目\类别,如“$item\类别” 如果$item_状态{ $statement.=$ANDOR类似于“$item_state”的item_state”; } 如果$item_城市{ $statement.=$ANDOR item_city类似于“$item_city”; } 如果$db_id{ $statement.=$ANDOR db_id='$db_id'; } $keywords=参数'keywords' 如果$keywords { ifparam“searchmatch”eq精确 { $statement.=$ANDOR item\u name=\$keywords\或item\u desc=\$keywords\ 或项目描述2=\$keywords\ } 其他的 {$statement.=$ANDOR; my@keywords=split/,$keywords高级搜索mysql perl,mysql,perl,search-engine,Mysql,Perl,Search Engine,我是个新手。我已经搜索Stackoverflow几个星期了,试图找到高级搜索的代码。 终于创造了我自己。它工作得很好。我在这里列出它是为了其他可能想使用它的人。 问题是: 当没有选择任何项目类别时,我默认为*但它不起作用。 item_category是搜索所需的唯一变量 我是否需要关注消毒或黑客注射 精确匹配似乎不起作用。它可能正在搜索100个单词的“FREE”,但找不到匹配项。有什么想法吗 对可靠性和速度问题有什么建议吗 $ANDOR=参数'ANDOR';创建AND或OR搜索 如果$ANDOR
foreach my $keyword(@keywords)
{
$statement .= " item_name LIKE '%$keyword%'
OR item_desc LIKE '%$keyword%'
OR item_desc2 LIKE '%$keyword%' ";
}
}
}
$date_begin=参数'date_begin';
如果$date\u开始{
$statement.=$ANDOR modification_time>“$date_begin”;
}
如果$user{
$statement.=$ANDOR类似于“$user”的用户;
}
$price_low=参数'price_low';
$price_high=参数‘price_high’;
如果$price\u低和$price\u高{
$statement.=$AND或项目价格介于$price\u low'和$price\u high'之间;
}
elsif$price\u low和$price\u high均衡器{
$statement.=$AND或项目价格介于“$price\u low”和*”之间;
}
elsif$price\u高和$price\u低均衡器{
$statement.=$ANDOR项目价格介于'0'和'$price\u high'之间;
}
其他的
{
$statement.=
}
我的$sth=$dbh->prepareqqSELECT*来自$statement所在的表
或者死$DBI::errstr;
$sth->execute;
而我的@rows=$sth->fetchrow\u数组
{
$total\u row\u count=$sth->rows;
$database_rows=join\|,@rows;
推送@database\u rows,$database\u rows;
}
不是where子句的有效条件。您可以将1替换为,但更好的是省略where子句的这一部分
对,;使用参数绑定。e、 g
if ($item_state) {
$statement .= " $ANDOR item_state LIKE ? ";
push(@binds, $item_state);
}
然后,要使DBI正确清理并包含您的参数:
$sth->execute(@binds);
检查生成的完整查询。我怀疑,如果你看一下和/或优先规则,它不会像你想的那样,你也许可以明智地使用括号
不要这样做。在CPAN上查找一些为您做后端工作的东西,并使用适当的参数调用它。在你使用了其他人为此编写的工具之后,你会对所有你没有处理的情况有一个很好的了解,然后可以考虑如何添加你认为缺少的内容,如果你决定再次进行搜索
目前,我已经编写了4次简单的DB查询引擎/tiny ORM,其中3次是用perl编写的。每次我学到新的东西,但更重要的是每次我记得为什么我应该使用其他人的解决方案,他们已经找到了所有的边缘案例。Re 3,你猜对了。并且具有比或更高的优先级,因此精确的搜索子句需要parens。谢谢。修改后的代码效果很好。只是不知道如何发布它。。。