현재 위치: > 최신 기사 목록> Bind_param과 함께 stmt_init을 사용하여 배치 삽입 작업을 수행하십시오

Bind_param과 함께 stmt_init을 사용하여 배치 삽입 작업을 수행하십시오

M66 2025-05-29

다량의 데이터 삽입 작업을 처리 할 때 삽입 문을 통해 루프가 덜 효율적입니다. 성능을 향상시키기 위해 MySQLI :: STMT_INIT BIND_PARAM () 과 결합하여 사전 처리 된 문의 배치 실행을 구현하는 데 사용될 수 있으며, 이는 실행 효율을 향상시킬뿐만 아니라 SQL 주입 위험을 방지 할 수 있습니다. 이 기사에서는 예제를 통해이 작업을 효율적으로 수행하는 방법을 설명합니다.

1. 왜 전처리 진술을 사용합니까?

준비 + bind_param 의 사용은 기존 문자열 스 플라이 싱 방법보다 안전하며 특히 동적 매개 변수가있는 상황에 특히 적합합니다. 장점은 다음과 같습니다.

  • SQL 주입을 피하십시오.

  • 실행 효율을 향상시키기 위해 SQL의 반복적 인 컴파일을 피하십시오.

  • 좋은 가독성과 명확한 구조.

2. mysqli :: stmt_init 및 bind_param을 사용하는 기본 프로세스

우리는 간단한 사용자 정보 테이블 사용자를 예로 들고 그 구조는 다음과 같습니다.

 CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50),
    email VARCHAR(100)
);

여러 사용자 레코드를 삽입해야한다고 가정하십시오. 다음은 전체 PHP 구현입니다.

 <?php
// 데이터베이스 연결 구성
$mysqli = new mysqli("localhost", "db_user", "db_pass", "db_name");

// 연결을 확인하십시오
if ($mysqli->connect_errno) {
    die("연결이 실패했습니다: " . $mysqli->connect_error);
}

// 명령문 객체를 초기화하십시오
$stmt = $mysqli->stmt_init();

// 준비하다 SQL 성명
$sql = "INSERT INTO users (username, email) VALUES (?, ?)";
if (!$stmt->prepare($sql)) {
    die("전처리가 실패했습니다: " . $stmt->error);
}

// 바인딩 매개 변수(변수는 참조됩니다)
$stmt->bind_param("ss", $username, $email);

// 삽입 할 데이터를 시뮬레이션합니다
$data = [
    ["alice", "alice@m66.net"],
    ["bob", "bob@m66.net"],
    ["charlie", "charlie@m66.net"]
];

// 배치 삽입을 수행하십시오
foreach ($data as $row) {
    $username = $row[0];
    $email = $row[1];
    if (!$stmt->execute()) {
        echo "삽입 실패: " . $stmt->error . "<br>";
    }
}

$stmt->close();
$mysqli->close();
?>

3. 핵심 포인트 분석

1. stmt_init준비 의 조합

$ mysqli-> repay () 약어를 직접 사용할 수는 있지만 stmt_init을 사용하여 프로세스를 명시 적으로 표현하는데, 이는 복잡하거나 대규모 프로젝트에 더 적합합니다.

2. 매개 변수 바인딩은 루프 외부에서 완료해야합니다

bind_param은 변수에 대한 참조를 바인딩하므로 루프에서 변수의 값을 변경할 수 있으며 매번 반창 할 필요가 없습니다.

3. 오류 처리

execution () 후 리턴 값을 확인하면 삽입에 실패한 레코드를 신속하게 찾는 데 도움이 될 수 있습니다.

4. 성능 최적화 제안

  • 배치 제출 : 대량의 데이터 삽입의 경우 배치로 처리 할 수 ​​있습니다 (예 : 1,000 항목 당 하나의 그룹).

  • 자동 커밋 ( $ mysqli-> autocommit (false) )을 끄고 배치가 처리 된 후 균일하게 트랜잭션을 제출하십시오.

  • 다중 값 삽입 구문을 사용하여 테스트 성능 차이를 비교하십시오 (... 값 (...), (...), ...)에 삽입하십시오.

V. 결론

mysqli :: stmt_initbind_param ()을 사용하면 배치 삽입의 효율성을 향상시킬뿐만 아니라 응용 프로그램의 보안 및 유지 보수 가능성을 향상시킬 수 있습니다. 이 방법은 많은 양의 사용자 데이터 또는 로깅과 같은 시나리오를 처리 할 때 특히 권장됩니다.