programing

부울 모드에서 마리아DB 전체 텍스트 검색에서 사용할 수 있는 문자는 무엇입니까?

kingscode 2023. 8. 29. 21:31
반응형

부울 모드에서 마리아DB 전체 텍스트 검색에서 사용할 수 있는 문자는 무엇입니까?

검색을 위해 MariaDB 10.1.37 InnoDB 테이블의 SQL 쿼리에 PHP를 통해 사용자 입력을 전달하고 싶습니다.잘못된 SQL 쿼리를 생성하지 않도록 보호합니다.현재 다음과 같은 알려진 연산자 문자를 제거하고 있습니다.

preg_replace('/[\+\-\<\>\(\)\~\*\"]/', ' ', $user_input)

그리고 나는 a를 추가합니다.*각 단어에 대한 문자따라서 사용자 입력이foo bar쿼리는 다음과 같습니다.

SELECT columnname, MATCH(columnname) AGAINST('foo* bar*' IN BOOLEAN MODE) AS score
FROM tablename;

안타깝게도 사용자가 입력할 수 있는 다른 문자가 있어 쿼리를 위반할 수 있습니다.예를 들어, 사용자가 입력하는 경우%질문은 다음과 같습니다.AGAINST('%*' IN BOOLEAN MODE)다음과 같은 오류가 나타납니다.syntax error, unexpected $end, expecting FTS_TERM or FTS_NUMB or '*'.

문제를 일으키는 문자(블랙리스트)를 필터링하거나 문제가 없는 문자를 화이트리스트에 추가할 수 있습니다.

문서에서 허용되거나 허용되지 않는 문자를 정의하는 내용을 찾을 수 없습니다.

허용되거나 허용되지 않는 알려진 문자 집합이 있습니까?

반대의 접근 방식을 택하시겠습니까?허용할 문자를 결정합니다.

$x = preg_replace("/[^-'a-zA-Z0-9]/", ' ', $user_input);
$x = trim($x, '-');

보관:

  • 하이픈으로 연결된 단어 대시
  • 축약에 대한 아포스트로피
  • 문제를 일으킬 수 있는 것은 잘라냅니다.

제거:

  • 더하기 및 별표 - FT 구문으로 인해
  • 슬래시 및 이중 따옴표 - PHP 구문

그런 다음 아포스트로피가 아닌 이중 따옴표를 사용합니다.

AGAINST("foo* bar*" IN BOOLEAN MODE) 

(아래의 설명도 참조하십시오.

언급URL : https://stackoverflow.com/questions/56261756/what-characters-are-allowed-in-mariadb-full-text-search-in-boolean-mode

반응형