반응형
부울 모드에서 마리아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
반응형
'programing' 카테고리의 다른 글
MariaDBC++ 커넥터 컴파일 (0) | 2023.08.29 |
---|---|
MySQL - LIKE를 사용하여 정확한 단어 일치를 검색하는 방법? (0) | 2023.08.29 |
확장 및 축소 방법확장 및 축소 방법Javascript를 사용하시겠습니까? (0) | 2023.08.29 |
윈도우즈 배치 파일 내에서 PowerShell 스크립트를 실행하는 방법 (0) | 2023.08.29 |
콘다가 차지하는 디스크 공간을 어떻게 확보합니까? (0) | 2023.08.29 |