>  기사  >  백엔드 개발  >  PDO를 사용하여 배열을 MySQL IN 문에 안전하게 바인딩하는 방법은 무엇입니까?

PDO를 사용하여 배열을 MySQL IN 문에 안전하게 바인딩하는 방법은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-11-27 22:45:15546검색

How to Safely Bind an Array to a MySQL IN Statement Using PDO?

MySQL IN 문에 대한 PDO 바인딩 값

질문:

어떻게 바인드할 수 있습니까? PDO를 사용하여 MySQL IN 문에 값 배열을 추가하는 동시에 개별 값을 유지합니다. 문?

답변:

PDO를 사용하여 MySQL의 IN 문에 값 배열을 바인딩하는 것은 PDO가 값을 이스케이프하는 방식으로 인해 문제가 발생합니다. 기본적으로 PDO는 작은따옴표로 문자열 값을 이스케이프합니다. 이로 인해 IN 절 내에서 전체 배열이 개별 요소가 아닌 단일 문자열로 처리됩니다.

안타깝게도 PDO를 사용하여 이를 직접 달성할 수 있는 간단한 방법은 없습니다. 그러나 다음과 같은 대체 접근 방식도 있습니다.

1. 수동으로 쿼리 구성

참조 질문에서 제안한 대로 IN 절 내의 값을 연결하여 쿼리를 수동으로 구성할 수 있습니다.

$sql = "SELECT users.id
FROM users
JOIN products
ON products.user_id = users.id
WHERE products IN (" . implode(',', $values) . ")";

2. FIND_IN_SET 사용

FIND_IN_SET은 쉼표로 구분된 목록 내에서 하위 문자열을 검색할 수 있는 MySQL 함수입니다. 이 접근 방식에는 쉼표로 구분된 인용 목록을 FIND_IN_SET에 대한 인수로 사용하는 작업이 포함됩니다.

$sql = "SELECT users.id
FROM users
JOIN products
ON products.user_id = users.id
WHERE FIND_IN_SET(CAST(products.id AS CHAR), :products)";

그러나 FIND_IN_SET은 대규모 데이터 세트의 성능에 영향을 미칠 수 있습니다.

3. 사용자 정의 함수(UDF) 생성

MySQL에서 UDF를 생성하여 사용자 정의 작업을 수행할 수 있습니다. 쉼표로 구분된 목록을 개별 값으로 분할하는 UDF를 만들 수 있습니다. 이 방법은 큰 IN 절이 있는 쿼리에 가장 효율적인 옵션으로 간주됩니다.

이러한 접근 방식 중 하나를 사용하면 문 내의 개별 값을 유지하면서 값 배열을 MySQL IN 문에 효과적으로 바인딩할 수 있습니다.

위 내용은 PDO를 사용하여 배열을 MySQL IN 문에 안전하게 바인딩하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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