현재 위치: > 최신 기사 목록> STMT_INIT를 사용하여 여러 문장을 실행하는 방법 (준비 된 명령문 루프 실행)

STMT_INIT를 사용하여 여러 문장을 실행하는 방법 (준비 된 명령문 루프 실행)

M66 2025-05-29

PHP에서 MySQLI Extension을 사용하여 SQL 문을 실행할 때 STMT_INIT 는 매우 유용한 기능으로 MySQLI_STMT 객체를 초기화하여 전처리 문을 실행할 수 있습니다. 전처리 명세서를 사용하면 데이터베이스 쿼리에 자리 표시자를 사용할 수있어 SQL 주입 공격을 방지 할 수 있습니다.

때로는 실행할 때마다 다른 매개 변수를 사용하여 동일한 전처리 문을 여러 번 실행해야합니다. 이 경우 STMT_INIT를 사용하여 전처리 명세서를 여러 번 실행하는 기능을 구현할 수 있습니다. 다음은 PHP에서 STMT_INIT를 사용하여 여러 SQL 문을 실행하는 방법을 보여주는 예입니다.

 <?php
// 1. 데이터베이스 연결을 만듭니다
$servername = "localhost";
$username = "root";
$password = "password";
$dbname = "test_database";

// 연결을 만듭니다
$conn = new mysqli($servername, $username, $password, $dbname);

// 연결이 성공했는지 확인하십시오
if ($conn->connect_error) {
    die("연결이 실패했습니다: " . $conn->connect_error);
}

// 2. 사용stmt_init전처리 진술을 초기화하십시오
$stmt = $conn->stmt_init();

// 준비 진술이 성공했는지 확인하십시오
if ($stmt->prepare("INSERT INTO users (username, email) VALUES (?, ?)")) {

    // 3. 데이터 세트를 시뮬레이션합니다,이 데이터는 여러 번 삽입됩니다
    $users = [
        ['john_doe', 'john@m66.net'],
        ['jane_doe', 'jane@m66.net'],
        ['alice_smith', 'alice@m66.net'],
    ];

    // 4. 전처리 문의 루프 실행,사용자 데이터를 하나씩 삽입하십시오
    foreach ($users as $user) {
        $username = $user[0];
        $email = $user[1];

        // 매개 변수를 전처리 명령문에 바인딩합니다
        $stmt->bind_param("ss", $username, $email);

        // 실행 진술
        if ($stmt->execute()) {
            echo "사용자가 성공적으로 삽입했습니다: $username, $email\n";
        } else {
            echo "삽입 실패: " . $stmt->error . "\n";
        }
    }

    // 5. 가까운 진술
    $stmt->close();
} else {
    echo "전처리 명세서 준비가 실패했습니다: " . $conn->error;
}

// 6. 데이터베이스 연결을 닫습니다
$conn->close();
?>

코드 설명 :

  1. 데이터베이스 연결 설정 : 먼저 MySQL 데이터베이스에 연결해야합니다. 이 예에서 LocalHost는 서버로 사용되며 실제 상황에 따라 연결 매개 변수를 조정해야합니다.

  2. 초기화 명세서 : $ conn-> stmt_init ()를 사용하여 실행 준비가 된 명령문 개체를 초기화합니다. 그런 다음 준비 방법을 통해 전처리 된 SQL 문을 설정하십시오. 이 예에서는 사용자 테이블에 사용자 이름이메일 필드를 삽입하는 삽입 문에 삽입을 준비하고 있습니다.

  3. BIND 매개 변수 : BINT_PARAM 방법을 통해 전처리 진술에서 PHP 변수를 자리 표시 자에게 바인딩합니다. "SS" 매개 변수는 두 개의 문자열 유형 매개 변수에 바인딩되어 있음을 의미합니다.

  4. 루프 실행 : Foreach 루프에서 여러 사용자 데이터 세트가 포함 된 배열을 전달합니다. 각 루프는 실행 메소드를 실행하여 데이터 행을 삽입합니다.

  5. Close 문 및 연결 : 작업이 완료된 후 Close () 메소드를 통해 STMT 및 데이터베이스 연결을 닫습니다.

이점:

  1. SQL 주입 방지 : 전처리 명세서와 파라미터 바인딩을 사용 하므로이 프로세스는 SQL 주입 공격을 효과적으로 방지 할 수 있습니다.

  2. 고효율 : 동일한 쿼리 명령문의 경우, 새로운 SQL 문의 반복적 인 생성을 피하고 효율성 향상을 피하고 반복적으로 반복하여 다른 매개 변수가 실행됩니다.

참고 :

  1. 루프를 실행할 때마다 BINT_PARAM실행 메소드가 다른 입력 데이터를 올바르게 처리 할 수 ​​있는지 확인하십시오.

  2. 많은 양의 데이터를 처리 해야하는 경우 데이터베이스의 연결 구성이 동시 요청을 처리하고 성능 병목 현상을 피할 수 있는지 확인하십시오.

이러한 방식으로 PHP에서 STMT_INIT를 사용하여 SQL 문을 효과적으로 실행하고 다른 매개 변수를 동적으로 전달할 수 있습니다. 이 예제는 PHP에서 여러 전처리 문을 실행하는 방법을 더 잘 이해하는 데 도움이되기를 바랍니다.