MySQLi 준비된 명령문으로 여러 행 삽입
문제:
효율적으로 삽입하고 싶습니다. MySQLi 준비된 문을 사용하여 여러 행을 데이터베이스에 추가합니다. 현재 접근 방식에는 삽입할 각 행에 대해 별도의 문자열을 구성하는 방식이 포함되어 있어 비효율적입니다. 한 번의 실행으로 여러 행을 삽입하는 단일 준비된 문을 실행하는 방법을 찾고 있습니다.
해결책:
준비된 문은 일반적으로 단일 행 작업에 사용되지만, 하나의 명령문에 여러 행을 삽입할 수 있는 복잡한 기술이 있습니다. 인덱스 배열의 샘플 인덱스 배열([[1, 2, 3], [4, 5, 6], [7, 8, 9]])에서 테스트된 다음 코드는 프로세스를 보여줍니다.
<code class="php">$rows = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]; // Sample indexed array of indexed arrays $rowCount = count($rows); $values = "(" . implode('),(', array_fill(0, $rowCount, '?,?,?')) . ")"; $conn = new mysqli("localhost", "root", "", "myDB"); $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>
이 접근 방식은 준비된 단일 문("INSERT INTO test (col1, col2, col3) VALUES (...)")을 구성하고 평면화된 $rows 배열의 자리 표시자 값을 채웁니다. str_repeat 함수는 바인딩 매개변수에 대한 적절한 수의 자리 표시자 문자를 정의하는 데 사용됩니다.
대체 접근 방식:
여러 행을 삽입하여 루프 실행이 필요한 경우 단일 행 준비된 문 접근 방식:
<code class="php">foreach ($rows as $row) { $stmt = $conn->prepare("INSERT INTO test (col1, col2, col3) VALUES (?,?,?)"); $stmt->bind_param('iii', $row[0], $row[1], $row[2]); $stmt->execute(); }</code>
추가 리소스:
위 내용은 MySQLi 준비된 문을 사용하여 여러 행을 효율적으로 삽입하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!