"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > 자리표시자와 매개변수를 사용하여 \"WHERE... IN\"으로 PDO 쿼리를 실행하는 방법은 무엇입니까?

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

2024년 11월 17일에 게시됨
검색:705

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가 별도의 매개변수로 처리되므로 쿼리를 정확하게 실행할 수 있습니다.

최신 튜토리얼 더>

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

Copyright© 2022 湘ICP备2022001581号-3