현재 위치: > 최신 기사 목록> PDOSTATEMENT를 사용할 때 데이터 일관성을 보장하는 방법 :: ROWCOUNT를 처리하여 배치 인서트를 처리합니다.

PDOSTATEMENT를 사용할 때 데이터 일관성을 보장하는 방법 :: ROWCOUNT를 처리하여 배치 인서트를 처리합니다.

gitbox 2025-05-19

데이터베이스 작업을 수행 할 때, 특히 배치 ( 삽입 )에 데이터를 삽입 할 때 모든 데이터가 올바르게 삽입되고 데이터 일관성을 유지하는 것이 매우 중요합니다. PHP의 PDO Extension은 강력한 데이터베이스 작업 기능을 제공하며 PDostatement :: RowCount 함수는 SQL 작동이 성공적으로 실행되는지 여부를 결정하는 데 도움이 될 수 있습니다. 이 기사에서는이 기능을 사용하여 배치 삽입 작업의 성공을 확인하고 데이터 일관성을 보장하는 방법을 살펴 봅니다.

1. PDO 기본

먼저 PDO의 기본 사용법을 검토해 봅시다. PDO (PHP Data Objects)는 통합 데이터베이스 액세스 인터페이스를 제공하는 PHP의 확장자입니다. PDO를 통해 데이터베이스에 연결하고 SQL 쿼리를 실행할 수 있습니다.

삽입 작업을 수행 할 때 PDO는 성공적으로 삽입 된 행의 수를 반환하여 작업이 성공했는지 여부를 결정하는 데 중요합니다. 그러나 배치 삽입을 수행 할 때 각 데이터가 성공적으로 삽입되는지 여부를 올바르게 결정하는 것이 특히 복잡합니다.

2. 배치 삽입 작업의 기본 구현

데이터베이스에 사용자 데이터 세트를 삽입해야한다고 가정 해 봅시다. PDO를 사용하면 트랜잭션을 통해 데이터 일관성을 보장 할 수 있습니다. 배치 삽입 작업은 일반적으로 다음과 같습니다.

 <?php
try {
    // 만들다 PDO 인스턴스 및 데이터베이스에 연결하십시오
    $pdo = new PDO("mysql:host=localhost;dbname=testdb", "username", "password");

    // 설정 PDO 오류 모드
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    // 거래를 시작하십시오
    $pdo->beginTransaction();

    // 삽입 할 배치 데이터
    $data = [
        ['name' => 'Alice', 'email' => '[email protected]'],
        ['name' => 'Bob', 'email' => '[email protected]'],
        ['name' => 'Charlie', 'email' => '[email protected]']
    ];

    // 준비하다 SQL 성명
    $stmt = $pdo->prepare("INSERT INTO users (name, email) VALUES (:name, :email)");

    // 매개 변수를 바인딩하고 삽입을 수행하십시오
    foreach ($data as $row) {
        $stmt->bindParam(':name', $row['name']);
        $stmt->bindParam(':email', $row['email']);
        $stmt->execute();
    }

    // 거래를 제출하십시오
    $pdo->commit();
    
    // 마지막 행의 수를 삽입하십시오
    $insertedRows = $stmt->rowCount();
    echo "성공적으로 삽입되었습니다 $insertedRows 라인 데이터。";

} catch (Exception $e) {
    // 오류가 발생하면 트랜잭션을 롤백하십시오
    $pdo->rollBack();
    echo "실수: " . $e->getMessage();
}
?>

위의 코드는 배치 삽입 작업에 PDO를 사용하는 방법을 보여주고 삽입이 완료된 후 rowCount ()를 사용하여 삽입 된 행의 수를 얻으십시오. 이것은 삽입이 성공했는지 여부를 결정하는 기본 방법입니다.

3. 데이터 일관성을 보장합니다

배치 삽입 작업에서는 모든 데이터 조각이 누락이나 오류없이 올바르게 삽입되도록하는 것이 매우 중요합니다. 데이터 일관성을 보장하기 위해 일반적으로 배치 작업 전반에 걸쳐 트랜잭션 ( begintransaction ()Commit () )을 사용합니다. 이는 일부 데이터가 성공적으로 삽입되고 일부 데이터가 실패한 상황을 피할 수 있습니다.

RowCount를 사용하여 삽입이 성공했는지 확인하십시오

RowCount ()가 영향을받는 행의 수를 반환하지만 배치 인서트의 경우 각 데이터 삽입이 성공하면 rowCount () 의 반환 값은 예상하는 삽입물 수와 같아야합니다. 삽입 실패가 있으면 RowCount () 의 값이 예상보다 낮습니다. 따라서 RowCount () 의 반환 값을 비교하여 삽입이 성공했는지 판단 할 수 있습니다.

 if ($stmt->rowCount() === count($data)) {
    echo "모든 데이터는 성공적으로 삽입됩니다。";
} else {
    echo "일부 데이터 삽입에 실패했습니다。";
    // 在此处可以进行실수处理,回滚或记录실수
}

오류 처리 및 롤백

배치 삽입을 수행 할 때 특정 데이터 삽입이 실패하더라도 데이터베이스의 일관성을 유지하려면 모든 작업을 계속 롤백해야합니다. 트랜잭션을 사용하면 전체 배치 삽입물이 성공하거나 실패합니다.

 try {
    $pdo->beginTransaction();
    
    foreach ($data as $row) {
        $stmt->bindParam(':name', $row['name']);
        $stmt->bindParam(':email', $row['email']);
        $stmt->execute();
    }

    // 모든 삽입이 성공했는지 확인하십시오
    if ($stmt->rowCount() === count($data)) {
        $pdo->commit();
        echo "모든 데이터 삽입이 성공적으로 삽입됩니다。";
    } else {
        throw new Exception("데이터 삽입에 실패했습니다,트랜잭션을 롤백하십시오。");
    }
} catch (Exception $e) {
    $pdo->rollBack();
    echo "거래 롤백,실수信息:" . $e->getMessage();
}

위의 코드에서 RowCount () 반환 수가 예상되는 인서트 수와 일치하지 않으면 예외를 수동으로 던지고 Catch Statement 블록에서 트랜잭션 롤백을 수행합니다.

4. 요약

  • pdostatement :: rowCount ()를 사용하여 배치 삽입 작업이 성공적인지 효과적으로 결정하십시오.

  • 트랜잭션과 함께 배치 삽입의 원자력을 보장하고 부분 삽입 실패로 인한 데이터 불일치를 피할 수 있습니다.

  • 데이터 일관성을 유지하는 것은 배치 작업의 핵심 요점이며 예외를 포착하고 트랜잭션을 롤백함으로써 단일 삽입 실패로 인해 전체 배치 작업에 영향을 미치지 않을 수 있습니다.

이 접근법을 통해 배치에 삽입 된 모든 데이터 조각이 성공적으로 삽입되도록하는 동시에 데이터의 무결성과 일관성을 가장 많이 보장 할 수 있습니다.

<풋내어 스타일 = "텍스트-알림 : 중