> 백엔드 개발 > PHP 튜토리얼 > 자리 표시자 배열과 함께 IN 절을 사용할 때 PDO가 예기치 않은 결과를 반환하는 이유는 무엇입니까?

자리 표시자 배열과 함께 IN 절을 사용할 때 PDO가 예기치 않은 결과를 반환하는 이유는 무엇입니까?

Barbara Streisand
풀어 주다: 2024-12-21 08:31:13
원래의
947명이 탐색했습니다.

Why Does PDO Return Unexpected Results When Using an IN Clause with an Array of Placeholders?

IN 절 배열과 함께 PDO 사용 [중복]

질문:

PDO를 사용하여 배열을 사용하는 IN 절이 있는 명령문을 실행할 때 값에 대해 이 코드가 예상치 못한 결과를 반환하는 이유는 무엇입니까? 결과:

$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));
로그인 후 복사

답변:

PDO는 값 배열에 자리 표시자를 사용하는 IN 절을 처리하는 데 어려움을 겪습니다. 이 문제를 해결하려면 자리 표시자 문자열을 동적으로 생성하여 쿼리에 삽입하고 배열 값을 별도로 바인딩해야 합니다.

위치 자리 표시자의 경우:

$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);
로그인 후 복사

이름이 지정된 자리 표시자의 경우 :

// collect parameters for query
$params = ["foo" => "foo", "bar" => "bar"];

// prepare IN clause placeholders and values
$ids = [1,2,3];
$in = "";
$i = 0;
foreach ($ids as $item) {
    $key = ":id" . $i++;
    $in .= ($in ? "," : "") . $key;
    $in_params[$key] = $item;
}

// construct query and execute
$sql = "SELECT * FROM table WHERE foo=:foo AND id IN ($in) AND bar=:bar";
$stm = $db->prepare($sql);
$stm->execute(array_merge($params, $in_params));
로그인 후 복사

위 내용은 자리 표시자 배열과 함께 IN 절을 사용할 때 PDO가 예기치 않은 결과를 반환하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿