MySQL에서 쿼리 내에서 슬래시()를 처리하면 혼란스러워. 다음 쿼리를 고려하십시오.
<code class="sql">(SELECT * FROM `titles` where title = 'test\') UNION ALL (SELECT * FROM `titles` where title LIKE 'test\\')</code>
LIKE 절을 사용하는 두 번째 쿼리에는 "test"에서 원래 슬래시를 이스케이프하기 위해 추가 백슬래시가 필요할 것으로 예상할 수 있습니다. 그러나 결과에 따르면 두 쿼리 모두 제목이 "test"인 동일한 행을 성공적으로 반환한 것으로 나타났습니다.
WHERE 및 LIKE 절에 이스케이프 문자를 사용하는 MySQL의 동작 때문에 불일치가 발생합니다. WHERE 절에서 백슬래시는 이스케이프 문자 역할을 하여 특수 문자가 문자 그대로 해석되지 않도록 보호합니다. 반면, LIKE 절에서는 백슬래시가 기본 이스케이프 문자이므로 검색 패턴 내에서 다른 문자를 이스케이프할 수 있습니다.
LIKE에 대한 MySQL 매뉴얼에 명시된 대로:
따라서 "test"의 백슬래시는 WHERE 절을 구문 분석하는 동안 자동으로 이스케이프됩니다. LIKE 절이 의도한 이스케이프 시퀀스와 일치하도록 명시적으로 두 배로 늘려야 합니다("테스트\").
또는 다음 수정된 쿼리에 표시된 대로 LIKE에 대해 다른 이스케이프 문자를 지정할 수 있습니다.
<code class="sql">SELECT * FROM `titles` WHERE title LIKE 'test\' ESCAPE '|'</code>로그인 후 복사백슬래시를 이스케이프 문자인 파이프 문자로 바꾸면 백슬래시를 중복하지 않고도 리터럴 "test"를 정확하게 검색할 수 있습니다.
위 내용은 MySQL의 WHERE 및 LIKE 절에서 슬래시를 다르게 이스케이프해야 하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!