"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > 여러 레코드를 삭제할 때 PDO로 \"WHERE... IN\" 쿼리를 처리하는 방법은 무엇입니까?

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

2024년 11월 13일에 게시됨
검색:400

How to Handle \

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

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

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

$query = "DELETE from `foo` WHERE `id` IN (:idlist)";

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

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

다음으로 각 ID를 해당 물음표에 바인딩합니다.

for ($i = 0; $i bindParam($i   1, $idlist[$i]);
}

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

최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3