PDO를 사용하여 데이터베이스 액세스를 향상하려는 노력의 일환으로 수많은 개발자가 특히 "WHERE... IN"과 관련된 문제에 직면합니다. IN' 쿼리입니다. PDO 준비 문 내에서 항목 목록을 사용하기 위한 복잡한 사항을 조사하고 적절한 접근 방식을 찾아보겠습니다.
다음이 필요한 시나리오를 생각해 보세요. 양식에서 확인된 항목 목록을 기반으로 데이터베이스에서 항목을 삭제합니다. 각 항목에는 일반적으로 배열에 저장되는 해당 ID가 있습니다. 일반적인 "WHERE... IN" 쿼리는 다음과 같습니다:
$query = "DELETE FROM `foo` WHERE `id` IN (:idlist)"; $st = $db->prepare($query); $st->execute(array(':idlist' => $idlist));
그러나 이 접근 방식을 사용하면 첫 번째 ID만 삭제되는 경우가 많습니다. 이는 PDO가 쉼표로 구분된 목록을 단일 값으로 해석하여 후속 ID를 무시하기 때문입니다.
이 문제를 피하려면 자리 표시자와 바인딩 매개변수를 활용해야 합니다. 이 접근 방식에는 전체 쉼표로 구분된 목록을 개별 자리 표시자(물음표)로 바꾸고 배열을 반복하여 각 ID를 자리 표시자에 바인딩하는 작업이 포함됩니다. 이를 달성하는 방법은 다음과 같습니다.
$idlist = array('260','201','221','216','217','169','210','212','213'); $questionmarks = str_repeat("?,", count($idlist)-1) . "?"; $stmt = $dbh->prepare("DELETE FROM `foo` WHERE `id` IN ($questionmarks)"); foreach ($idlist as $id) { $stmt->bindParam(1, $id); }
이 수정된 접근 방식을 통해 각 ID가 별도의 매개변수로 처리되므로 쿼리를 정확하게 실행할 수 있습니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3