현재 위치: > 최신 기사 목록> 트랜잭션 처리에서 mysqli_stmt :: $ insert_id와 함께 올바른 삽입 ID를 얻는 방법?

트랜잭션 처리에서 mysqli_stmt :: $ insert_id와 함께 올바른 삽입 ID를 얻는 방법?

gitbox 2025-06-03

1. 거래 및 삽입 ID 획득의 과제

트랜잭션에서 다중 삽입 작업을 수행하거나 데이터 삽입 데이터를 수행 할 때 특히 멀티 스레드 또는 다중 사용자 동의 액세스를 통해 MySQLi-> insert_id를 통해 자동 인증 ID를 직접 읽는 것이 부정확 할 수 있습니다. 전처리 된 명령문의 $ insert_id 속성을 사용하면 현재 문의 영향을받는 삽입 ID가 얻어 지도록 할 수 있습니다.

2. mysqli_stmt :: $ insert_id 소개

mysqli_stmt :: $ insert_id는 PHP 8.1 이상 버전에 추가 된 새로운 속성입니다. 전처리 진술을 실행 한 후 자체 증가 ID를 얻는 데 특별히 사용됩니다. $ mysqli-> insert_id 보다 더 정확하고 안전합니다.


3. 샘플 코드

다음 예제는 트랜잭션에서 MySQLI_STMT를 사용하여 삽입 작업을 수행하는 방법을 보여주고 삽입 레코드의 ID를 얻습니다.

 <?php
$mysqli = new mysqli("gitbox.net", "username", "password", "database");

// 거래를 시작하십시오
$mysqli->begin_transaction();

try {
    // 전처리 삽입 문
    $stmt = $mysqli->prepare("INSERT INTO users (username, email) VALUES (?, ?)");

    $username = 'alice';
    $email = '[email protected]';

    $stmt->bind_param("ss", $username, $email);

    // 삽입을 수행하십시오
    $stmt->execute();

    // 삽입물을 얻으십시오 ID
    $insertId = $stmt->insert_id;

    echo "새로 삽입 된 사용자ID예: " . $insertId . "\n";

    // 거래를 제출하십시오
    $mysqli->commit();

    $stmt->close();
} catch (Exception $e) {
    // 롤백 트랜잭션 오류가 발생했습니다
    $mysqli->rollback();
    echo "거래에 실패했습니다,롤백。오류 메시지: " . $e->getMessage();
}

$mysqli->close();
?>

4. 주요 포인트 요약

  • 트랜잭션에서 삽입 작업을 수행 할 때 먼저 $ mysqli-> begin_transaction ()을 호출하여 트랜잭션을 시작하십시오. 작업이 완료되면 $ mysqli-> commit ()을 호출하여 제출하십시오. 실패하면 $ mysqli-> rollback ()을 롤백으로 호출하십시오.

  • SQL 주입의 위험을 피하기 위해 MySQLI_STMT 전처리 명령문을 사용하여 삽입을 수행하십시오.

  • 삽입이 성공한 후에는 $ stmt-> insert_id를 통해이 삽입의 자동 증가 ID를 가져와 정확도를 보장합니다.

  • 데이터의 일관성과 무결성을 보장하기 위해 예외 처리 중에 트랜잭션을 롤백해야합니다.


5. 호환성 설명

mysqli_stmt :: $ insert_id 는 php 8.1 이상에서만 사용할 수 있습니다. 이전 버전의 PHP를 사용하는 경우 $ mysqli-> insert_id를 사용하는 것을 고려할 수 있지만 동시성 문제에주의하십시오.