>백엔드 개발 >PHP 튜토리얼 >자리표시자와 매개변수를 사용하여 \'WHERE... IN\'으로 PDO 쿼리를 실행하는 방법은 무엇입니까?

자리표시자와 매개변수를 사용하여 \'WHERE... IN\'으로 PDO 쿼리를 실행하는 방법은 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-10-30 04:20:02842검색

How to Execute PDO Queries with

"WHERE... IN"을 사용한 PDO 쿼리

PDO를 사용하여 데이터베이스 액세스를 향상하려는 노력으로 수많은 개발자가 특히 "WHERE... IN"과 관련된 문제에 직면합니다. IN' 쿼리입니다. PDO 준비된 문 내에서 항목 목록을 사용하기 위한 복잡한 내용을 살펴보고 적절한 접근 방식을 찾아보겠습니다.

"WHERE... IN" 수수께끼

다음이 필요한 시나리오를 생각해 보세요. 양식에서 확인한 항목 목록을 기반으로 데이터베이스에서 항목을 삭제합니다. 각 항목에는 일반적으로 배열에 저장되는 해당 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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