현재 위치: > 최신 기사 목록> PDOSTATEMENT와 함께 트랜잭션에서 롤백 운영을 처리하는 방법 :: RowCount

PDOSTATEMENT와 함께 트랜잭션에서 롤백 운영을 처리하는 방법 :: RowCount

gitbox 2025-05-28

데이터베이스 작업에 PDO를 사용하는 경우 트랜잭션 처리는 매우 중요한 메커니즘으로 일련의 작업이 성공적이거나 모두 실패 할 수 있습니다. 트랜잭션에는 일반적으로 시작 transaction () , commit ()rollback () 의 ​​핵심 메소드가 포함됩니다. 여러 SQL 작업을 수행 할 때 때때로 특정 조건에 따라 거래를 롤백할지 여부를 결정해야합니다. 현재 pdostatement :: RowCount 함수는 유용 할 수 있습니다.

pdostatement :: RowCount는 이전 SQL 문의 영향을받는 행의 수를 반환 할 수 있습니다. 이를 사용하여 데이터베이스 작업이 성공했는지 효과적으로 판단하여 거래를 롤백할지 여부를 결정할 수 있습니다.

트랜잭션 처리에 PDO를 사용하십시오

다음은 RowCount를 사용하여 데이터베이스 작업 결과를 결정하고 필요한 경우 트랜잭션을 롤백하는 방법을 보여주는 예입니다.

 <?php
// 데이터베이스 연결
$dsn = 'mysql:host=localhost;dbname=testdb';
$username = 'root';
$password = '';
$options = [
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
];

// 만들다PDO물체
try {
    $pdo = new PDO($dsn, $username, $password, $options);
} catch (PDOException $e) {
    die('Connection failed: ' . $e->getMessage());
}

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

try {
    // 첫 번째를 실행하십시오SQL작동하다
    $stmt1 = $pdo->prepare('UPDATE users SET balance = balance - 100 WHERE id = :id');
    $stmt1->execute(['id' => 1]);

    // 영향을받는 행의 수를 확인하십시오
    if ($stmt1->rowCount() == 0) {
        // 행이 업데이트되지 않은 경우,거래를 롤백하십시오
        throw new Exception('업데이트가 실패했습니다,사용자 균형이 충분하지 않습니다');
    }

    // 두 번째를 실행하십시오SQL작동하다
    $stmt2 = $pdo->prepare('INSERT INTO transactions (user_id, amount) VALUES (:user_id, :amount)');
    $stmt2->execute(['user_id' => 1, 'amount' => -100]);

    // 检查第二个작동하다的影响行数
    if ($stmt2->rowCount() == 0) {
        // 삽입이 실패한 경우,트랜잭션을 롤백하십시오
        throw new Exception('트랜잭션 레코드 삽입이 실패했습니다');
    }

    // 모든 것이 괜찮다면,거래를 제출하십시오
    $pdo->commit();
    echo "거래 제출 성공!";
} catch (Exception $e) {
    // 出现异常时트랜잭션을 롤백하십시오
    $pdo->rollBack();
    echo "거래 롤백,오류 메시지: " . $e->getMessage();
}
?>

코드 분석

  1. 거래 개방 및 커밋 <br> $ pdo-> begintransaction ()을 사용하여 트랜잭션을 시작하고 $ pdo-> commit ()는 트랜잭션을 커밋하는 데 사용됩니다. 문제가 발생하면 $ pdo-> rollback ()을 사용하여 트랜잭션을 롤백합니다.

  2. RowCount를 사용하여 판단 <br> 각 SQL 작동 후에는 $ stmt-> rowCount ()를 사용하여 작업이 성공했는지 확인합니다. 예를 들어, 업데이트 명령문이 행에 업데이트되지 않으면 (즉, 균형이 충분하지 않거나 조건의 불일치) 0을 반환 하고 롤백 작동을 트리거하여 판단 할 수 있습니다.

  3. 예외 처리 <br> Try-Catch 문을 통해 예외를 포착하고 거래를 롤백합니다. rowCount () 가 0을 반환하거나 다른 오류가 발생하면 새로운 예외 ()가 예외를 던지도록 트리거되고 롤백이 수행됩니다.

  4. 데이터베이스 운영의 신뢰성 <br> 트랜잭션 처리를 사용하여 데이터베이스 작업의 원자력을 보장합니다. 예외가 발생하더라도 트랜잭션의 롤백은 데이터베이스의 일관성을 보장하고 일부 작업이 적용되는 상황과 데이터 불일치를 피합니다.

RowCount를 사용하여 SQL 문이 성공적으로 실행되는지 확인하십시오.

RowCount () 함수는 매우 유용합니다. 특히 데이터 수정이 실제로 적용되는지 확인 해야하는 경우. SQL 문이 행을 수정하지 않으면 RowCount () 는 0을 반환합니다. 이는 일반적으로 작업이 예상 효과를 달성하지 못함을 의미합니다. 트랜잭션 처리에서 RowCount () 의 가치에 따라 거래를 롤백할지 여부를 결정할 수 있습니다.

예를 들어, 은행 이체 운영에서 계정 잔액 업데이트 및 거래 내역을 성공적으로 삽입하는지 확인합니다. 단계가 실패하면 트랜잭션이 롤백되어 데이터의 일관성과 무결성을 유지합니다.

요약

PDostatement :: RowCount 및 Transaction Management를 결합하여 PHP 응용 프로그램에서 데이터베이스 작업을 효율적이고 안정적으로 수행 할 수 있습니다. RowCount ()는 SQL 운영이 성공했는지 여부를 판단하는 데 중요한 수단을 제공하는 반면 트랜잭션은 운영의 원자력을 보장합니다. 문제가 발생하면 데이터 오류를 피하기 위해 제 시간에 롤백 할 수 있습니다.

이 방법은 금융 시스템, 인벤토리 관리 시스템 등과 같은 데이터 일관성이 필요한 시나리오에서 널리 사용될 수 있습니다.