>데이터 베이스 >MySQL 튜토리얼 >PDO에서 와일드카드를 사용하여 LIKE 매개변수를 안전하게 바인딩하는 방법은 무엇입니까?

PDO에서 와일드카드를 사용하여 LIKE 매개변수를 안전하게 바인딩하는 방법은 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-12-06 03:09:12899검색

How to Safely Bind LIKE Parameters with Wildcards in PDO?

PDO에서 % 와일드카드를 사용하여 LIKE 값 바인딩

PDO는 바인딩된 매개변수를 사용하여 SQL 쿼리를 실행하는 안전한 방법을 제공하여 SQL 주입 취약점을 방지합니다. %와 같은 와일드카드 문자를 포함하는 LIKE 매개변수를 바인딩할 때 혼동이 발생할 수 있습니다.

아래 쿼리에서는 PDO를 사용하여 $partial% 변수를 바인딩하려고 합니다.

select wrd from tablename WHERE wrd LIKE '$partial%'

PDO가 이러한 바인딩을 처리하는 방법을 이해하는 것이 중요합니다. 올바른 접근 방식은 특정 요구 사항에 따라 다릅니다.

옵션 1: 끝에 부분 와일드카드(%)를 사용하여 바인딩

예, 유효한 옵션입니다.

select wrd from tablename WHERE wrd LIKE ':partial%'

여기서 :partial은 $partial="somet"에 바인딩됩니다.

옵션 2: 부분 와일드카드로 바인딩(%) 값 내부

다음 접근 방식을 사용할 수도 있습니다.

select wrd from tablename WHERE wrd LIKE ':partial'

여기서 :partial은 $partial="somet%"에 바인딩됩니다.

대안: CONCAT 함수 사용

원하는 경우 MySQL 쿼리 내에서 문자열 연결을 수행할 수 있습니다. 자체:

SELECT wrd FROM tablename WHERE wrd LIKE CONCAT(:partial, '%')

특수 문자 처리

부분 단어에 %, _ 또는 와 같은 특수 문자가 포함된 경우 매개변수를 바인딩하기 전에 수동으로 이스케이프해야 합니다. 다음 코드는 이를 보여줍니다.

$stmt= $db->prepare("SELECT wrd FROM tablename WHERE wrd LIKE :term ESCAPE '+'");
$escaped= str_replace(array('+', '%', '_'), array('++', '+%', '+_'), $var);
$stmt->bindParam(':term', $escaped);

위 내용은 PDO에서 와일드카드를 사용하여 LIKE 매개변수를 안전하게 바인딩하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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