PDO를 사용하여 단일 MySQL 쿼리에 여러 행을 삽입하는 방법은 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-11-09 00:47:02
원래의
836명이 탐색했습니다.

How to Insert Multiple Rows in a Single MySQL Query with PDO?

PDO MySQL: 하나의 쿼리에 여러 행 삽입

PDO를 사용하여 단일 쿼리에 여러 행을 삽입하는 것은 어려운 작업일 수 있습니다. 그러나 준비된 문의 기능을 활용하면 이 프로세스를 단순화하고 일반적인 오류를 피할 수 있습니다.

문제: 배열을 문자열로 변환

" 여러 행이 포함된 INSERT 쿼리를 실행하려고 할 때 "배열을 문자열로 변환" 오류가 발생하면 PDO 문이 개별 값 대신 자리 표시자에 배열을 바인딩하려고 시도했을 가능성이 높습니다.

해결 방법: 바인딩 개별 값

이 문제를 해결하려면 각 행의 값을 반복하고 이를 준비된 문에 개별적으로 바인딩해야 합니다. 이는 PDO 문 개체의 binParam() 메서드를 사용하여 달성할 수 있습니다.

예를 들어 다음 코드를 고려해보세요.

$query = "INSERT INTO $table (key1, key2, key3) VALUES (:key1, :key2, :key3)";
$stmt = $pdo->prepare($query);

foreach ($data as $item) {
    $stmt->bindParam(':key1', $item['key1']);
    $stmt->bindParam(':key2', $item['key2']);
    $stmt->bindParam(':key3', $item['key3']);
    $stmt->execute();
}
로그인 후 복사

이 코드는 $data 배열의 각 값을 다음과 같이 바인딩합니다. 준비된 문의 해당 자리 표시자를 사용하여 배열의 각 행에 대해 하나씩 쿼리를 여러 번 실행합니다.

대체 솔루션: 배열 바인딩 사용

또는 일부 PDO 드라이버는 배열 바인딩을 지원하므로 전체 값 배열을 단일 자리 표시자에 바인딩할 수 있습니다. 그러나 이 기능은 보편적으로 지원되지 않으며 모든 경우에 사용 가능하지 않을 수 있습니다.

개선된 코드 예

다음은 multipleInsert() 함수의 향상된 버전입니다. 준비된 문을 사용하고 값을 개별적으로 바인딩합니다.

public function multipleInsert($table, $data = array())
{
    if (count($data) > 1) {
        $fieldnames = array_keys($data[0]);
        $query = "INSERT INTO $table (`" . implode('`, `', $fieldnames) . "`) VALUES ";
        $query .= implode(', ', array_fill(0, count($data), "(:" . implode(', :', $fieldnames) . ")"));
        $stmt = $this->start->prepare($query);

        $i = 1;
        foreach ($data as $item) {
            foreach ($item as $key => $value) {
                $stmt->bindParam(":$key$i", $item[$key]);
                $i++;
            }
        }

        $stmt->execute();

        $return['status'] = true;
        $return['lastid'] = $this->start->lastInsertId();

        return $return;
    } else {
        die('$data is less than two arrays, use single insert instead.');
    }
}
로그인 후 복사

위 내용은 PDO를 사용하여 단일 MySQL 쿼리에 여러 행을 삽입하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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