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 중국어 웹사이트의 기타 관련 기사를 참조하세요!