>백엔드 개발 >PHP 튜토리얼 >PHP에서 IN 절 및 배열과 함께 PDO를 올바르게 사용하는 방법은 무엇입니까?

PHP에서 IN 절 및 배열과 함께 PDO를 올바르게 사용하는 방법은 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-12-19 10:06:14787검색

How to Correctly Use PDO with an IN Clause and an Array in PHP?

PHP - IN 절 배열과 함께 PDO 사용

PDO를 사용하면 값 배열과 함께 IN 절이 포함된 SQL 문을 실행할 수 있습니다. 이 접근 방식은 문자열 연결(implode())에 적합하지만 자리 표시자를 사용할 때 문제가 발생할 수 있습니다.

문제 식별

다음 코드는 자리 표시자, 예상되는 모든 항목을 반환하지 않음:

$in_array = array(1, 2, 3);
$in_values = implode(',', $in_array);
$my_result = $wbdb->prepare("SELECT * FROM my_table WHERE my_value IN (:in_values)");
$my_result->execute(array(':in_values' => $in_values));
$my_results = $my_result->fetchAll();

이 코드는 my_value가 다음과 같은 항목만 반환합니다. 다른 요소(2와 3)가 아닌 $in_array의 첫 번째 요소(1).

위치 자리 표시자용 솔루션

PDO에서는 자리 표시자가 있는 문자열을 동적으로 생성해야 합니다. 평소처럼 배열 값을 바인딩하면서 쿼리에 삽입합니다. 위치 자리 표시자의 경우 이 솔루션이 작동합니다.

$in  = str_repeat('?,', count($in_array) - 1) . '?';
$sql = "SELECT * FROM my_table WHERE my_value IN ($in)";
$stm = $db->prepare($sql);
$stm->execute($in_array);
$data = $stm->fetchAll();

명명된 자리 표시자에 대한 솔루션

명명된 자리 표시자에 대한 접근 방식에는 일련의 자리 표시자(예: :id0, :id1, :id2) 값을 키-값 배열로 수집합니다. 예는 다음과 같습니다.

$ids = [1,2,3];
$in = "";
$i = 0;
foreach ($ids as $item)
{
    $key = ":id" . $i++;
    $in .= ($in ? "," : "") . $key; // :id0,:id1,:id2
    $in_params[$key] = $item; // collecting values into a key-value array
}

$sql = "SELECT * FROM table WHERE foo=:foo AND id IN ($in) AND bar=:bar";
$stm = $db->prepare($sql);
$stm->execute(array_merge(["foo" => "foo", "bar" => "bar"], $in_params)); // merge two arrays
$data = $stm->fetchAll();

이러한 솔루션을 따르면 값 배열이 포함된 IN 절과 함께 PDO를 성공적으로 사용할 수 있습니다.

위 내용은 PHP에서 IN 절 및 배열과 함께 PDO를 올바르게 사용하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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