현재 위치: > 최신 기사 목록> pdostatement를 통해 삭제 된 데이터 수량을 얻는 방법 :: RowCount 배치로 삭제할 때

pdostatement를 통해 삭제 된 데이터 수량을 얻는 방법 :: RowCount 배치로 삭제할 때

gitbox 2025-05-20

응용 프로그램을 개발할 때는 종종 데이터베이스에서 레코드를 삭제해야합니다. 삭제 작업이 완료된 후 삭제 된 레코드 수를 얻어야 할 수도 있습니다. PDO (PHP Data Objects)는 PHP에서 일반적으로 사용되는 데이터베이스 액세스 방법 중 하나입니다. 영향을받는 행의 수를 얻기 위해 pdostatement :: rowCount () 메소드를 제공합니다. 그러나 배치 삭제 작업의 경우 pdostatement :: rowCount ()를 사용하여 삭제 된 레코드 수를 얻을 때주의를 기울일 세부 정보가 있습니다.

1. pdostatement의 기본 사용 :: rowCount ()

pdostatement :: rowCount () 메소드는 가장 최근에 실행 된 SQL 문의 영향을받는 행의 수를 반환합니다. 일반적으로 쿼리 작업 후 (예 : 업데이트 또는 삭제 )에 영향을받는 행의 수를 얻는 데 사용됩니다.

 <?php
// 우리에게 이미 하나가 있다고 가정합니다 PDO 예
$pdo = new PDO('mysql:host=localhost;dbname=testdb', 'root', '');

// 레코드를 삭제하십시오
$stmt = $pdo->prepare("DELETE FROM users WHERE id = :id");
$stmt->bindParam(':id', $id);
$stmt->execute();

// 삭제 된 레코드 수를 얻으십시오
$deletedRows = $stmt->rowCount();
echo "삭제 {$deletedRows} 기록";
?>

그러나 배치로 삭제할 때 RowCount () 메소드는 예상대로 삭제 된 레코드 수를 반환하지 않을 수 있습니다.

2. 벌크 삭제 작업 및 RowCount () 문제

배치 삭제를 수행 할 때 pdostatement :: rowCount ()에 의해 반환 된 행의 수는 정확히 기대치와 일치하지 않을 수 있습니다. 이는 일부 데이터베이스 (예 : MySQL)가 쿼리를 최적화하고 배치 삭제를 수행 할 때 다른 수의 영향을 반환 할 수 있기 때문입니다.

예를 들어, MySQL에서 삭제 작업은 기준을 충족하는 레코드를 찾을 수 없기 때문에 삭제 작업이 0 행에 영향을 미칩니다. 배치 삭제 작업의 경우에도 실제 삭제 된 레코드 만 계산됩니다. 이 시점에서 RowCount ()는 특히 기준을 충족하는 레코드가없는 경우 0으로 돌아갈 수 있습니다.

3. 삭제 된 레코드 수를 올바르게 얻는 방법은 무엇입니까?

배치 삭제의 경우 올바른 삭제 된 레코드 수를 보장하려면 다음 방법을 고려할 수 있습니다.

방법 1 : pdostatement를 사용한 후 쿼리 :: rowCount ()

한 가지 방법은 먼저 삭제 작업을 수행 한 다음 삭제 된 레코드 수를 쿼리하는 것입니다. 삭제 명령문을 실행 한 후 SELECT COUNT () 쿼리를 실행하여 삭제 된 레코드 수를 얻습니다.

 <?php
// 우리가 모든 연령보다 적은 연령을 삭제하고 싶다고 가정 해 봅시다18사용자
$stmt = $pdo->prepare("SELECT COUNT(*) FROM users WHERE age < 18");
$stmt->execute();
$deletedCount = $stmt->fetchColumn();

// 삭제를 수행하십시오
$stmt = $pdo->prepare("DELETE FROM users WHERE age < 18");
$stmt->execute();

// 삭제 된 레코드 수를 확인하십시오
echo "삭제 {$deletedCount} 기록";
?>

방법 2 : 트랜잭션을 사용하여 일관성을 보장합니다

배치 삭제 작업에서 트랜잭션을 활성화하면 데이터를 삭제하기 전에 정확한 레코드 수를 얻을 수 있습니다. 트랜잭션에서 삭제 작업 및 COUNT () 쿼리를 선택 하면이 둘 사이의 데이터 일관성을 확인할 수 있습니다.

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

try {
    // 삭제 기준을 충족하는 레코드 수를 얻으십시오.
    $stmt = $pdo->prepare("SELECT COUNT(*) FROM users WHERE age < 18");
    $stmt->execute();
    $deletedCount = $stmt->fetchColumn();

    // 삭제를 수행하십시오操作
    $stmt = $pdo->prepare("DELETE FROM users WHERE age < 18");
    $stmt->execute();

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

    // 삭제 된 레코드의 출력 번호
    echo "삭제 {$deletedCount} 기록";
} catch (Exception $e) {
    // 예외가 발생하는 경우,거래를 롤백하십시오
    $pdo->rollBack();
    echo "삭제가 실패했습니다: " . $e->getMessage();
}
?>

트랜잭션을 사용하면 삭제 작업과 레코드 카운트 쿼리 간의 데이터 불일치를 피할 수 있습니다.

방법 3 : pdostatement :: rowCount () 및 데이터베이스에서 반환 된 행 수용

반환 행 카운트를 지원하는 데이터베이스를 사용하는 경우 RowCount ()는 삭제 된 레코드 수를 정확히 반환해야합니다. 데이터베이스 실행 계획이 행 카운트에 영향을 미치는 오류를 반환하는 경우 조건부 쿼리, 로그 등과 같은 다른 방식으로 데이터를 보충해야 할 수도 있습니다.

4. 요약

배치로 데이터를 삭제할 때 pdostatement :: rowCount ()를 사용할 때 다음 지점에주의를 기울여 삭제 된 레코드를 얻으십시오.

  • RowCount ()가 반환 한 행 수는 특히 일부 최적화 된 SQL 작업의 경우 반드시 완전히 정확하지는 않습니다.

  • 삭제 레코드의 정확한 수를 얻으려면 삭제 작업을 수행하기 전에 쿼리 카운트를 통해 기준을 충족하는 레코드 수를 얻을 수 있습니다.

  • 트랜잭션을 사용하면 쿼리 및 삭제 작업의 원자력을 보장하고 중간 데이터의 불일치를 피합니다.

이러한 방법을 결합하여 배치 삭제 작업에서 삭제 된 레코드 수를보다 정확하게 얻고 데이터 운영의 안정성과 일관성을 향상시킬 수 있습니다.