>  기사  >  백엔드 개발  >  MySQLi에서 단일 준비된 명령문으로 여러 행을 삽입하는 방법은 무엇입니까?

MySQLi에서 단일 준비된 명령문으로 여러 행을 삽입하는 방법은 무엇입니까?

DDD
DDD원래의
2024-10-20 16:38:02259검색

How to Insert Multiple Rows with a Single Prepared Statement in MySQLi?

MySQLi에서 단일 준비된 명령문으로 여러 행 삽입

문제:

여러 행 삽입 준비된 문을 사용하여 행을 데이터베이스에 추가하면 각 행에 대해 별도의 쿼리가 필요하지 않습니다.

해결책:

준비된 문은 일반적으로 단일 행 작업을 처리하지만 가능합니다. 특수 쿼리 구문 및 방법을 사용하여 여러 행을 삽입합니다.

접근 방식:

  1. 값 문자열 생성: array_merge() 및 implode()를 사용하여 구성 "(, , ), ..." 형식의 값 문자열입니다. 삽입할 행을 나타냅니다.
  2. 문 준비: 값 문자열을 VALUES 절로 사용하여 괄호로 묶은 쿼리를 준비합니다.
  3. 바인딩 매개변수 생성: VALUES 절의 수를 결정합니다. 행 수를 곱하고 행당 열 수를 곱한 "i"(정수 값의 경우) 문자열 반복으로 바인딩 매개변수를 준비합니다.
  4. 값 바인딩: ...array_merge(를 사용합니다. ...$rows)를 사용하여 다차원 배열에서 값을 풀고 매개변수에 바인딩합니다.
  5. 문 실행: 준비된 문을 실행하여 단일 쿼리로 지정된 행을 삽입합니다.

코드 예:

<code class="php">$rows = [[1, 2, 3], [4, 5, 6], [7, 8, 9]];
$rowCount = count($rows);
$values = "(&" . implode('),(', array_fill(0, $rowCount, '?,?,?')) . "&)";

$stmt = $conn->prepare("INSERT INTO test (col1, col2, col3) VALUES $values");
$stmt->bind_param(str_repeat('i', $rowCount * 3), ...array_merge(...$rows));
$stmt->execute();</code>

대체 접근 방식:

단일 행으로 준비된 문을 사용하는 것도 허용됩니다. 자리 표시자를 추가하고 각 행에 대해 루프에서 실행합니다. 이는 더 간단하지만 잠재적으로 효율성이 떨어집니다.

위 내용은 MySQLi에서 단일 준비된 명령문으로 여러 행을 삽입하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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