"WHERE... IN" 절이 있는 PDO 쿼리
데이터베이스 액세스를 위해 PHP의 PDO로 작업할 때 "WHERE... IN"을 구성합니다. IN' 쿼리는 어려울 수 있습니다. 이 경우 목표는 양식에서 얻은 ID 목록을 기반으로 테이블에서 레코드를 삭제하는 것입니다.
원래 쿼리
<code class="php">$query = "DELETE from `foo` WHERE `id` IN (:idlist)"; $st = $db->prepare($query); $st->execute(array(':idlist' => $idlist));</code>
문제
이 쿼리는 목록의 첫 번째 ID만 삭제하고 쉼표 구분 기호로 인해 나머지 ID는 삭제합니다.
물음표를 사용한 해결 방법
준비된 문은 값을 제어 흐름 논리(쉼표)와 혼합할 수 없으므로 목록의 값당 하나의 자리 표시자를 사용해야 합니다. 이는 쉼표로 구분된 물음표 문자열을 생성하고 개별 ID를 여기에 바인딩함으로써 달성됩니다.
<code class="php">$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($id); }</code>
이 접근 방식을 사용하려면 목록을 반복하여 각 ID를 순차적으로 바인딩해야 하며, 모든 기록이 다음과 같이 삭제되도록 해야 합니다. 의도했습니다.
위 내용은 PDO 쿼리에서 \'WHERE... IN\' 절이 있는 레코드를 효과적으로 삭제하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!