>백엔드 개발 >PHP 튜토리얼 >PDO가 IN() 절 쿼리에 대한 배열 바인딩을 처리할 수 있나요?

PDO가 IN() 절 쿼리에 대한 배열 바인딩을 처리할 수 있나요?

DDD
DDD원래의
2024-12-25 07:52:14590검색

Can PDO Handle Array Binding for IN() Clause Queries?

PDO를 사용하여 배열을 IN() 조건에 바인딩할 수 있나요?

IN() 조건에 대한 PDO 쿼리에서 배열을 활용하면 각 배열 구성원에 대한 자리 표시자를 수동으로 구성하면 됩니다. 프로세스에 대한 세부 내용은 다음과 같습니다.

$ids       = [1, 2, 3, 7, 8, 9];
$inQuery    = str_repeat('?,', count($ids) - 1) . '?'; // generates ?,?,?,?,?,?

$stmt = $db->prepare("SELECT * FROM table WHERE id IN($inQuery)");
$stmt->execute($ids);
$data = $stmt->fetchAll();

str_repeat를 사용하여 $inQuery 변수를 구성하여 자리 표시자 목록을 만듭니다. 이렇게 하면 각 배열 구성원에 해당하는 자리 표시자가 있습니다.

또 다른 접근 방식은 자리 표시자와 관련 값이 포함된 배열을 병합하는 것입니다. 이 방법은 쿼리 내에 다른 자리 표시자가 있는 경우에 적합합니다.

$arr = [1,2,3];
$in  = str_repeat('?,', count($arr) - 1) . '?';
$sql = "SELECT * FROM table WHERE foo=? AND column IN ($in) AND bar=? AND baz=?";
$stmt = $db->prepare($sql);
$params = array_merge([$foo], $arr, [$bar, $baz]);
$stmt->execute($params);
$data = $stmt->fetchAll();

명명된 자리 표시자에는 :id0,:id1,:id2와 같은 해당 자리 표시자 시퀀스를 생성하는 약간 다른 접근 방식이 필요합니다.

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

$sql = "SELECT * FROM table WHERE foo=:foo AND id IN ($in) AND bar=:bar";
$stmt = $db->prepare($sql);
$stmt->execute(array_merge($params, $in_params));
$data = $stmt->fetchAll();

이 방법은 PDO를 사용하여 IN() 조건에서 배열을 사용하는 안전하고 효율적인 방법을 제공합니다.

위 내용은 PDO가 IN() 절 쿼리에 대한 배열 바인딩을 처리할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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