> 백엔드 개발 > PHP 튜토리얼 > MySQL 와일드카드를 이스케이프하는 데 이중 백슬래시가 필요한 이유는 무엇입니까?

MySQL 와일드카드를 이스케이프하는 데 이중 백슬래시가 필요한 이유는 무엇입니까?

Susan Sarandon
풀어 주다: 2024-11-12 11:22:02
원래의
884명이 탐색했습니다.

Why Does Escaping MySQL Wildcards Require Double Backslashes?

MySQL 와일드 카드 이스케이프: 이중 이스케이프 난제 이해

PHP에서 사용자 입력으로 작업하고 MySQL 데이터베이스에 연결할 때 특수 문자 이스케이프 문자는 악의적인 입력을 방지하는 데 중요합니다. 전통적으로 PHP의 mysql_real_escape_string() 함수가 이 목적으로 사용되었지만 MySQL의 와일드카드인 % 및 _와 같은 문자가 누락되었습니다. 결과적으로 많은 개발자는 이러한 문자를 이스케이프 처리하기 위해 addcslashes를 사용합니다.

그러나 addcslashes의 예상치 못한 동작은 의문을 제기합니다. _를 백슬래시로 이스케이프하지만 " 또는 '가 아닌 이유는 무엇입니까? 이 기사에서는 MySQL 와일드카드 이스케이프의 미묘한 차이를 살펴보고 이를 올바르게 처리할 수 있는 솔루션을 탐색하겠습니다.

LIKE 이해 이스케이프

다른 와일드카드 문자와 달리 % 및 _는 표준 MySQL 문자열 리터럴에서 와일드카드가 아니며 LIKE에 대한 문자열을 준비하기 위해 LIKE 일치 컨텍스트에서만 특수 문자가 됩니다. 사용하려면 매개변수화된 쿼리의 경우에도 LIKE 이스케이프라고 하는 추가 이스케이프 계층이 필요합니다.

LIKE 이스케이프에서는 _ 및 %를 이스케이프 문자 자체(일반적으로 백슬래시)와 함께 이스케이프해야 합니다. 그러나 표준 SQL과 달리 MySQL은 리터럴 백슬래시 이스케이프(문자열 리터럴)와 LIKE 이스케이프 모두에 백슬래시를 사용합니다.

이중 이스케이프 및 백슬래시 문제

예를 들어, 백슬래시를 이중으로 사용하면 혼란스러운 이중 이스케이프 시나리오가 생성됩니다. 예를 들어 리터럴 백분율 기호(%)를 일치시키려면 LIKE 'something\%'를 사용하여 이중 백슬래시를 이스케이프해야 합니다. 그러나 이는 ANSI SQL에 따르면 잘못된 것이며, 데이터베이스에 따라 문제가 발생할 수 있습니다.

휴대용 솔루션

이 문제를 해결하고 이식성을 확보하려면, LIKE ... ESCAPE ... 구문을 사용하여 LIKE 표현식의 기본 이스케이프 문자를 재정의해야 합니다. 다음은 이 접근 방식을 보여주는 함수입니다.

function like($s, $e) {
    return str_replace(array($e, '_', '%'), array($e.$e, $e.'_', $e.'%'), $s);
}
로그인 후 복사

이 함수를 사용하면 ANSI SQL 호환성을 보장하면서 LIKE 사용을 위해 문자열을 이스케이프할 수 있습니다.

결론

MySQL에서 와일드카드를 이스케이프하는 것은 간단해 보일 수 있지만 이중 이스케이프 문제는 혼란을 야기할 수 있습니다. LIKE 탈출의 복잡성을 이해하고 휴대용 솔루션을 사용함으로써 악의적인 입력을 효과적으로 방지하고 데이터베이스의 무결성을 보장할 수 있습니다.

위 내용은 MySQL 와일드카드를 이스케이프하는 데 이중 백슬래시가 필요한 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿