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가 별도의 매개변수로 처리되어 쿼리를 정확하게 실행할 수 있습니다.
위 내용은 자리표시자와 매개변수를 사용하여 \"WHERE... IN\"으로 PDO 쿼리를 실행하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!