배열 매개변수 전달 및 PDO와 함께 LIMIT 절 사용
데이터베이스 쿼리 작업 시 매개변수 배열을 PDO에 전달하는 것이 도움이 될 수 있습니다. LIMIT 절을 활용하는 동안 PDO 문. 그러나 개별 매개변수를 설정하기 위해 binParam 메소드를 사용할 때 이는 어려울 수 있습니다.
딜레마
이 문제는 LIMIT 절에서 특정 숫자 값을 바인딩해야 하기 때문에 발생합니다. , 실행 메소드는 명명된 매개변수 배열을 기대합니다. 이러한 비호환성으로 인해 두 접근 방식을 동시에 사용할 수 없습니다.
문제 극복
해결책은 PDO::ATTR_EMULATE_PREPARES의 기본 설정을 비활성화하는 데 있습니다. 활성화되면 PDO는 내부적으로 동적 SQL을 생성하고 값을 인용하여 기본적으로 준비된 문을 에뮬레이트합니다. 그러나 이 기본 동작은 명명된 매개변수 전달을 방해합니다.
에뮬레이트 준비 비활성화
setAttribute 메서드를 사용하여 PDO::ATTR_EMULATE_PREPARES를 false로 설정하면 기본 동작이 비활성화됩니다. . 이를 통해 PDO는 실제 준비된 명령문을 사용하여 LIMIT 절을 계속 활용하면서 명명된 매개변수의 바인딩을 활성화할 수 있습니다.
사용 예
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$sql = "SELECT * FROM table WHERE id LIKE CONCAT('%', :id, '%') LIMIT :limit1, :limit2";
$stmt = $pdo->prepare($sql);
$stmt->execute(array(':id' => $id, ':limit1' => $limit1, ':limit2' => $limit2)); // Works!
성능 고려 사항
에뮬레이트된 준비는 기본적으로 성능 향상을 위해 MySQL에 사용됩니다. 에뮬레이트된 준비를 비활성화하면 성능이 약간 저하될 수 있지만 매개변수 바인딩의 유연성이 향상됩니다.
추가 리소스
이 주제에 대한 자세한 내용은 다음 리소스를 참조하세요.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3