사용자 입력을 받아서 mysql 필드를 검색하는 검색 기능을 수행 중입니다. 아이디어는 사용자가 검색 한 단어를 분할하여 각 용어를 찾습니다. 해당 분야는 입니다.MySQL에서 정규식 오류 (PHP에서 동일한 정규식 사용)
내가 일하는 순수 PHP 스크립트에서 복사 된 사용하고있는 정규식을 구축하는 데 사용되는 코드 (정규식은 PHP와 잘 작동하는 것 같다, 그래서 나는 정규식 맛의 차이 용의자)
이 경우에 저를 용서 이것은 명백한 문제이지만 여전히 정규 표현식에 대한 느낌을 얻습니다.
먼저 나는 당신에게 내가 실행 쿼리를 표시되고 오류가 나는
이 는 정규 표현식 "SELECT * from `images` WHERE (`name` REGEXP '^(?=.*gallardo)(?=.*lambo).*$' OR `meta` REGEXP '^(?=.*gallardo)(?=.*lambo).*$') ORDER BY `changestamp` DESC
에서
있어 오류 '반복 연산자 피연산자 무효'같은 오류를 제공
"SELECT * from `images` WHERE (`name` REGEXP '^(?=.*gallardo).*$' OR `meta` REGEXP '^(?=.*gallardo).*$') ORDER BY `changestamp` DESC
얻을
이 정규식을 컴파일하려면 "gallardo lambo"와 같은 사용자 입력을 받아들입니다 그리고이 PHP 프로 시저를 실행하십시오
if(isset($_GET['keyword'])){
$searchterms = explode(' ',$_GET['keyword']);
$regstr = '^';
foreach($searchterms as $i => $v)
{
if($v)
$regstr .= '(?=.*'.preg_replace('/[-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/', "\\$&", $v).')';
}
$regstr .= '.*$';
}
는 내가 PHP의 preg_match()
이 방법을 사용하는 경우, 작동하는 것 같다
"(`name` REGEXP '$regstr' OR `meta` REGEXP '$regstr')"
같은 질의에 넣어.
어떤 통찰력이라도 있습니까? 내가 무엇을하고 있는지 전혀 모른다는 것을 자유롭게 말해주세요.
감사합니다.
내 직감이 검색을위한 SQL 쿼리에 정규식을 사용하여 아마도 – Kristian
을 slowwwww 하더군요'('PCRE 구문 =입니다? MySQL은 V8 정규식의 헨리 스펜서의 재 구현을 사용 – geekosaur
는 http://stackoverflow.com/questions/39726749 참조하십시오. 가능한 해결 방법은 –