여러 바인딩을 위한 매개변수 결합
데이터베이스 쿼리에서는 SQL 주입을 방지하고 성능을 향상시키기 위해 바인딩된 매개변수가 있는 준비된 문을 사용하는 것이 일반적입니다. 그러나 동일한 매개변수를 명령문 내에서 여러 번 사용해야 하는 경우 문제가 발생합니다.
문제: 매개변수를 여러 번 바인딩
PDO, 인기 있는 데이터베이스용 PHP 확장 상호 작용은 준비된 명령문 내에서 매개변수 표시문자의 재사용을 제한합니다. 이러한 제한은 쿼리에 동일한 매개변수가 여러 번 필요할 때 문제를 야기합니다.
해결책
이 상황을 처리하는 데는 여러 가지 접근 방식이 있습니다.
1. 사용자 정의 변수(MySQL)
이 솔루션에는 MySQL 사용자 정의 변수를 생성하고 여기에 공통 매개변수 값을 저장하는 작업이 포함됩니다. 이후에는 "@term"을 사용하여 쿼리에서 해당 변수를 반복적으로 참조할 수 있습니다.
SET @term = :term; SELECT ... FROM table WHERE name LIKE @term OR number LIKE @term;
2. 배열로 매개변수 바인딩
PDO는 매개변수 표시자의 재사용을 금지하지만 값 배열을 단일 매개변수에 바인딩할 수 있습니다. 이 접근 방식을 사용하려면 단일 매개변수 대신 배열을 허용하도록 쿼리를 수정해야 합니다.
SELECT ... FROM table WHERE name IN (:term) OR number IN (:term); $term = ["hello", "world"]; $stmt->bindParam(":term", $term, PDO::PARAM_STR | PDO::PARAM_ARRAY);
3. 동적 쿼리 생성
또 다른 옵션은 매개변수 표시자와 고유 접미사를 연결하여 쿼리 문자열을 동적으로 생성하여 여러 고유 매개변수를 효과적으로 생성하는 것입니다. 이 방법은 서버 측에서 약간 더 많은 처리가 필요합니다.
$query = "SELECT ... FROM table WHERE name LIKE :term1 OR number LIKE :term2"; $pdo->prepare($query); $pdo->bindValue(":term1", "%$term%", PDO::PARAM_STR); $pdo->bindValue(":term2", "%$term%", PDO::PARAM_STR);
결론
PDO 준비된 명령문에서 여러 개의 동일한 매개변수를 처리할 때 개발자는 다음 중 하나를 선택할 수 있습니다. 특정 요구 사항에 따른 다양한 솔루션. MySQL의 사용자 정의 변수는 간단하고 세션에 안전한 접근 방식을 제공하는 반면, 배열 또는 동적 쿼리 생성을 통한 매개변수 바인딩은 다양한 성능 균형을 갖춘 대체 옵션을 제공합니다.
위 내용은 PDO 준비 문에서 동일한 매개변수의 여러 인스턴스를 효율적으로 처리하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!