>백엔드 개발 >PHP 튜토리얼 >여러 레코드를 삭제할 때 PDO로 \'WHERE... IN\' 쿼리를 처리하는 방법은 무엇입니까?

여러 레코드를 삭제할 때 PDO로 \'WHERE... IN\' 쿼리를 처리하는 방법은 무엇입니까?

DDD
DDD원래의
2024-10-29 04:30:02343검색

How to Handle

PDO를 사용하여 "WHERE... IN" 쿼리 처리

데이터베이스 액세스를 위해 PDO를 사용할 경우 "WHERE... IN" 쿼리를 관리합니다. IN" 절은 문제를 일으킬 수 있습니다. 다음 시나리오를 고려하십시오. 가변 길이와 내용(예: '260,201,221,216,217,169,210,212,213')이 있는 "$idlist"로 표시되는 확인된 양식 항목 목록을 기반으로 데이터베이스 테이블에서 항목을 제거해야 합니다.

처음에는 아래와 같은 쿼리를 사용하는 것이 논리적으로 보일 수 있습니다.

<code class="php">$query = "DELETE from `foo` WHERE `id` IN (:idlist)";</code>

그러나 이 접근 방식은 첫 번째 ID만 삭제합니다. 쉼표와 후속 ID는 실수로 무시됩니다.

이 문제를 극복하려면 PDO에서 준비된 문의 동작을 이해하는 것이 중요합니다. 번호가 매겨진 매개 변수나 이름이 지정된 매개 변수를 사용하여 값을 자리 표시자에 바인딩할 수 있습니다. "WHERE... IN" 쿼리의 경우 목록의 각 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)");</code>

다음으로 각 ID를 해당 물음표:

<code class="php">for ($i = 0; $i < count($idlist); $i++) {
    $stmt->bindParam($i + 1, $idlist[$i]);
}</code>

이 방법을 사용하면 목록의 각 항목이 자리 표시자에 올바르게 바인딩되어 쿼리가 의도한 레코드를 성공적으로 삭제할 수 있습니다.

위 내용은 여러 레코드를 삭제할 때 PDO로 \'WHERE... IN\' 쿼리를 처리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.