> 백엔드 개발 > PHP 튜토리얼 > PDO 쿼리에서 \'WHERE... IN\' 절이 있는 레코드를 효과적으로 삭제하는 방법은 무엇입니까?

PDO 쿼리에서 \'WHERE... IN\' 절이 있는 레코드를 효과적으로 삭제하는 방법은 무엇입니까?

Linda Hamilton
풀어 주다: 2024-10-30 03:03:02
원래의
518명이 탐색했습니다.

How to Effectively Delete Records with

"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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿