현재 위치: > 최신 기사 목록> pdostatement를 통해 영향을받는 행 수를 얻는 방법 :: 조건부 판단을위한 RowCount

pdostatement를 통해 영향을받는 행 수를 얻는 방법 :: 조건부 판단을위한 RowCount

gitbox 2025-05-28

PHP를 사용하여 데이터베이스를 작동 할 때는 종종 SQL 문을 실행 한 후 얼마나 많은 데이터 행에 영향을 미치는지 알아야합니다. 예를 들어, 업데이트 , 삭제 또는 일부 삽입 작업을 수행 할 때 영향을받는 행의 수를 이해하면 작업이 성공했는지 또는 다음 단계가 필요한지 여부를 결정하는 데 도움이됩니다.

현재 pdostatement :: rowCount () 함수는 편리합니다. 이 기사는 RowCount () 메소드를 사용하는 방법을 소개하고 실제 코드 예제와 결합하여 반환 된 행 수에 따라 조건부 판단을하는 방법을 보여줍니다.

1. pdostatement :: rowCount ()

RowCount () 는 마지막으로 실행 된 SQL 문의 영향을받는 행의 수를 반환하는 PDOSTATEMENT 클래스의 방법입니다. 이 함수의 반환 값은 일반적으로 데이터가 실제로 업데이트되는지 삭제되는지 여부를 결정하는 데 사용됩니다.

 public int PDOStatement::rowCount();

참고 : RowCount ()는 특히 선택 쿼리에 사용될 때 다른 데이터베이스 드라이버에서 약간 다르게 행동 할 수 있으며, 이는 예상 결과를 반환하지 않을 수 있습니다.

2. 기본 사용법

다음은 데이터베이스에서 사용자 정보를 업데이트하는 예입니다. SQL을 실행 한 후 RowCount ()를 사용하여 데이터가 실제로 수정되었는지 여부를 결정합니다.

 <?php
// 데이터베이스 연결 정보
$dsn = 'mysql:host=localhost;dbname=testdb;charset=utf8';
$username = 'dbuser';
$password = 'dbpass';

try {
    // 만들다 PDO 예
    $pdo = new PDO($dsn, $username, $password);

    // 예외 오류 처리를 설정합니다
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    // 준비하다 SQL 업데이트 문
    $sql = "UPDATE users SET email = :email WHERE id = :id";
    $stmt = $pdo->prepare($sql);

    // 바인딩 매개 변수
    $stmt->bindValue(':email', '[email protected]');
    $stmt->bindValue(':id', 1);

    // 실행 진술
    $stmt->execute();

    // 영향을받는 행의 수를 얻으십시오
    $affectedRows = $stmt->rowCount();

    // 조건부 판단
    if ($affectedRows > 0) {
        echo "사용자 정보가 업데이트되었습니다,총 영향 {$affectedRows} 좋아요。";
    } else {
        echo "사용자 정보가 수정되지 않았습니다,데이터가 변경되지 않았기 때문일 수 있습니다。";
    }

} catch (PDOException $e) {
    echo "데이터베이스 오류:" . $e->getMessage();
}
?>

3. 일반적인 시나리오 및 사용 기술

1. 삭제 작업 후 삭제 수를 확인하십시오

 $sql = "DELETE FROM users WHERE last_login < NOW() - INTERVAL 1 YEAR";
$stmt = $pdo->prepare($sql);
$stmt->execute();

if ($stmt->rowCount() > 0) {
    echo "비활성 사용자가 성공적으로 삭제되었습니다。";
} else {
    echo "삭제할 사용자는 발견되지 않았습니다。";
}

2. 배치 삽입 후 삽입이 성공했는지 확인

일부 데이터베이스 (예 : MySQL)는 배치 삽입 후 RowCount () 를 반환 할 수 있습니다.

 $sql = "INSERT INTO logs (message, created_at) VALUES 
       ('작동하다1', NOW()), 
       ('작동하다2', NOW())";
$stmt = $pdo->prepare($sql);
$stmt->execute();

if ($stmt->rowCount() >= 2) {
    echo "로그는 배치로 작성되었습니다。";
} else {
    echo "로그 쓰기는 실패하거나 불완전합니다。";
}

4. 주목할만한 것들

  1. Select Queries의 경우 RowCount () 동작이 불확실합니다 . 일반적으로 결과가 있는지 확인하기 위해 FetchAll () 또는 Fetch ()를 사용하는 것이 좋습니다.

  2. 올바른 데이터베이스 드라이버 사용 : 일부 데이터베이스 (예 : SQLITE)는 일부 작업에서 rowCount () 에 대한 지원이 제한되어 있습니다.

  3. RowCount () ()가 성공적인 실행의 유일한 부호로 착각하지 마십시오 . 동일한 데이터를 업데이트하면 행 수를 변경하지 않을 수 있기 때문에 "영향을받는 행의 수"를 의미하며 "성공적인 작업"을 의미하지 않습니다.