PHP에서 PDO를 사용하여 매개변수 배열과 LIMIT 절을 사용하여 데이터베이스 쿼리를 실행하는 것은 어려울 수 있습니다. 이 상황을 효과적으로 해결하는 방법을 살펴보겠습니다.
배경:
배열을 활용하여 PDOStatement에 매개변수를 전달하는 동안 LIMIT 절을 사용하여 쿼리를 실행하려고 하면 문제가 발생합니다. 기본적으로 LIMIT 절의 :limit1 및 :limit2 자리 표시자는 바인딩하는 데 binParam()이 사용되는 경우 예상대로 작동하지 않습니다.
해결책:
해결 방법의 핵심 이 문제는 기본 PDO::ATTR_EMULATE_PREPARES 설정을 비활성화하는 것입니다. 이 설정이 활성화되면 PHP는 준비된 명령문을 실제로 사용하는 대신 에뮬레이션합니다. 이는 자리 표시자(:limit1, :limit2)가 매개변수로 해석되지 않아 관찰된 동작이 발생함을 의미합니다.
코드 조각:
문제를 해결하려면 다음을 추가하세요. 쿼리를 실행하기 전의 코드:
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
이렇게 하면 준비된 문 에뮬레이션이 비활성화되어 배열을 통해 매개변수를 전달할 수 있습니다. LIMIT 절을 효과적으로 활용합니다.
$sql = "SELECT * FROM table WHERE id LIKE CONCAT('%', :id, '%')
LIMIT :limit1, :limit2";
$stmt = $pdo->prepare($sql);
$stmt->execute(array(5));
추가 성능 고려 사항:
PDO::ATTR_EMULATE_PREPARES를 비활성화하면 성능에 영향을 줄 수 있습니다. 준비된 문은 일반적으로 에뮬레이트된 문보다 더 효율적입니다. 그러나 매개변수 전달 또는 LIMIT 절과 관련된 문제가 발생하는 경우 에뮬레이션을 비활성화하는 것이 필요할 수 있습니다.
추가 읽기:
자세한 정보 이 주제에 대해서는 다음 리소스를 참조하십시오.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3