트랜잭션에서 다중 삽입 작업을 수행하거나 데이터 삽입 데이터를 수행 할 때 특히 멀티 스레드 또는 다중 사용자 동의 액세스를 통해 MySQLi-> insert_id를 통해 자동 인증 ID를 직접 읽는 것이 부정확 할 수 있습니다. 전처리 된 명령문의 $ insert_id 속성을 사용하면 현재 문의 영향을받는 삽입 ID가 얻어 지도록 할 수 있습니다.
mysqli_stmt :: $ insert_id는 PHP 8.1 이상 버전에 추가 된 새로운 속성입니다. 전처리 진술을 실행 한 후 자체 증가 ID를 얻는 데 특별히 사용됩니다. $ mysqli-> insert_id 보다 더 정확하고 안전합니다.
다음 예제는 트랜잭션에서 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();
?>
트랜잭션에서 삽입 작업을 수행 할 때 먼저 $ mysqli-> begin_transaction ()을 호출하여 트랜잭션을 시작하십시오. 작업이 완료되면 $ mysqli-> commit ()을 호출하여 제출하십시오. 실패하면 $ mysqli-> rollback ()을 롤백으로 호출하십시오.
SQL 주입의 위험을 피하기 위해 MySQLI_STMT 전처리 명령문을 사용하여 삽입을 수행하십시오.
삽입이 성공한 후에는 $ stmt-> insert_id를 통해이 삽입의 자동 증가 ID를 가져와 정확도를 보장합니다.
데이터의 일관성과 무결성을 보장하기 위해 예외 처리 중에 트랜잭션을 롤백해야합니다.
mysqli_stmt :: $ insert_id 는 php 8.1 이상에서만 사용할 수 있습니다. 이전 버전의 PHP를 사용하는 경우 $ mysqli-> insert_id를 사용하는 것을 고려할 수 있지만 동시성 문제에주의하십시오.