>  기사  >  백엔드 개발  >  MySQL에서 `addcslashes` 이스케이프 밑줄이 다르게 표시되는 이유는 무엇입니까?

MySQL에서 `addcslashes` 이스케이프 밑줄이 다르게 표시되는 이유는 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-11-08 15:24:021030검색

Why Does `addcslashes` Escape Underscores Differently in MySQL?

MySQL 와일드카드 탈출: 밑줄 미스터리 해결

MySQL에서는 와일드카드와 밑줄(_), 퍼센트 기호(%)와 같은 특수 문자를 사용합니다. )는 사용자 입력이 데이터베이스로 전송될 때 탈출 문제를 생성할 수 있습니다. PHP 함수 mysql_real_escape_string은 대부분의 이스케이프 요구를 처리하지만 _ 및 %로 확장되지는 않습니다. 이러한 이유로 일부 사용자는 이러한 문자를 추가로 이스케이프 처리하기 위해 addcslashes를 사용하기도 합니다.

그러나 당황스러운 문제가 발생합니다. 사용자 입력에 밑줄이 포함된 경우 addcslashes를 통해 실행해도 입력이 다음과 같은 경우 이스케이프된 밑줄이 생성되지 않습니다. 데이터베이스에서 검색되었습니다. 예를 들어, "test_test " '가 전송된 다음 검색되면 결과에 이스케이프된 밑줄과 함께 "test_test " '"가 표시됩니다. 문제는 밑줄이 동일한 방법을 사용하여 이스케이프된 다른 문자와 다르게 이스케이프되는 이유는 무엇입니까?

답은 _ 및 %가 일반적인 MySQL 사용에서 와일드카드가 아니라는 사실에 있습니다. LIKE 문에서 사용될 때만 특수 문자가 되며 리터럴과 일치하도록 이스케이프해야 합니다. LIKE 문에 사용하기 위해 문자를 이스케이프하려면 중첩된 이스케이프 프로세스를 사용해야 합니다.

먼저, 문자열은 SQL 쿼리 내에서 LIKE 이스케이프되어야 합니다. 이 단계는 매개변수화된 쿼리를 사용하는 경우에도 수행되어야 합니다.

LIKE 이스케이프가 완료되면 문자열을 다시 이스케이프해야 합니다. SQL 외부에서 일반 문자열을 사용하는 경우 mysql_real_escape_string이 사용됩니다.

MySQL은 두 단계의 이스케이프 문자로 백슬래시()를 사용하기 때문에 혼란이 발생합니다. 설명하자면, LIKE 문에서 퍼센트 기호와 정확하게 일치하는 항목을 찾으려면 문자열을 이중 백슬래시로 이스케이프해야 합니다(`LIKE 'something%''). 그러나 ANSI SQL에서는 문자열 리터럴에서 백슬래시가 리터럴 백슬래시를 나타내고 따옴표(') 문자는 백슬래시 대신 이스케이프되어야 한다고 규정합니다.

플랫폼별 문제를 방지하려면 LIKE에서 기본 이스케이프 동작을 재정의하는 것이 좋습니다. 문을 작성하고 LIKE ... ESCAPE ... 구문을 사용하여 사용자 정의 이스케이프 문자를 정의합니다.

위 내용은 MySQL에서 `addcslashes` 이스케이프 밑줄이 다르게 표시되는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.