나는 초보자입니다. 고급 검색을위한 코드를 찾으려고 몇 주 동안 Stackoverflow를 검색했습니다.
마지막으로 내 자신을 생성했습니다. 그것은 꽤 효과적입니다. 나는 그것을 그것을 사용하고 싶어 할지도 모르는 다른 사람들을 위해 여기에 열거하고있다.
질문은 다음과 같습니다고급 검색 mysql perl
*
에 기본적으로 선택되지 않습니다 그러나 작동하지 않습니다
. item_category가 검색에 필요한 유일한 변수입니까?
위생 처리 또는 해킹 주입에 대해 우려해야합니까?
정확한 일치가 작동하지 않는 것 같습니다. 그것은 '무료'에 대한 100 단어를 검색 할 수 있으며 일치하는 항목을 찾을 수 없습니다. 어떤 아이디어?
안정성 및 속도 문제에 대한 제안 사항이 있으십니까?
$ ANDOR는 = PARAM ('Andor의')는 #은을 생성 AND OR 를 검색하는 경우 ($ ANDOR 당량 "") {$ ANDOR = "AND"}
경우 ($ item_category) { $ item_category = "$ item_category"; } else {$ item_category = "*"; } $ statement. = "item_category LIKE '$ item_category'";
if ($ item_state) { $ statement. = "$ ANDOR item_state LIKE '$ item_state'"; } if ($ item_city) { $ statement. = "$ ANDOR item_city LIKE '$ item_city'"; } if ($ db_id) { $ statement. = "$ ANDOR db_id = '$ db_id'"; }
$ keywords = param ('keywords');
경우 ($ 키워드) { 경우 ("정확한"PARAM ('searchmatch') EQ) { $ 문. = "$ ANDOR ITEM_NAME의 = \"$를 키워드 \ "또는 ITEM_DESC = \"$ 키워드 \ " 또는 item_desc2 = \"$ 키워드 \ ""; #
다른} {$ 문 =. "$ ANDOR"; my @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'); if ($ date_begin) { $ statement. = "$ ANDOR modification_time> '$ date_begin'"; }if ($ user) { $ statement. = "$ ANDOR user LIKE '$ user'"; }
$ price_low = param ('price_low'); $ price_high = param ('price_high'); if (($ price_low) & & ($ price_high)) { $ 명세서.= " '$ price_low'와 '$ price_high'사이에 $ ANDOR item_price"; } ELSIF (($의 price_low) & & ($ price_high EQ " '$의 price_low'AND *"BETWEEN $ ANDOR의 ITEM_PRICE ")) { $ 문 =."; } ELSIF (($ price_high) & & ($ price_low EQ "")) { $ 문 =. " '0'BETWEEN $ ANDOR의 ITEM_PRICE와 '$의 price_high'"; } else { $ statement. = "";
}
내 $ STH = $ dbh-> ((전분기 대비 $ 문) WHERE 테이블 SELECT * FROM) 준비 또는 $ DBI :: errstr을 다이; $ sth-> execute(); while ((my (@rows)) = $ sth-> fetchrow_array) { $ total_row_count = $ sth-> rows; $ database_rows = join ("\ |", @rows); push (@ database_rows, $ database_rows); }
Re (3)을 사용하면 올바르게 판단 할 수 있습니다. 'AND'는 'OR'보다 우선 순위가 높기 때문에 '정확한'검색 절에는 괄호가 필요합니다. – ikegami
감사합니다. 수정 된 코드는 훌륭하게 작동합니다. 그냥 게시하는 방법을 알아낼 수 없습니다 ... –