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 중국어 웹사이트의 기타 관련 기사를 참조하세요!