PHP를 사용하여 데이터베이스 중심 애플리케이션을 개발할 때 PDO는 데이터베이스와 상호 작용하는 강력하고 유연한 방법을 제공합니다. 특히 업데이트 문을 실행할 때 개발자는 종종 pdostatement :: rowCount ()를 사용하여 레코드가 영향을 받는지 확인합니다. 그러나 멀티 테이블 조인의 작업 업데이트와 관련하여 RowCount () 의 동작은 일부와 혼동 될 수 있습니다.
이 기사는 pdostatement :: rowCount ()를 올바르게 사용하여 다중 테이블 연결 업데이트 작업에서 영향을받는 레코드 수를 얻고 실제 코드 예제를 기반으로 예방 조치를 설명하는 방법을 살펴 봅니다.
pdostatement :: rowCount () 는 PDO가 삭제 , 삽입 또는 업데이트 문을 실행 한 후 영향을받는 행 수를 반환하는 방법입니다. 예를 들어:
$stmt = $pdo->prepare("UPDATE users SET status = 'active' WHERE last_login >= :lastLogin");
$stmt->execute([':lastLogin' => '2025-01-01']);
echo $stmt->rowCount(); // 영향을받는 행의 수를 출력하십시오
단일 테이블 작업의 경우이 방법은 일반적으로 영향을받는 행의 수를 정확하게 반환 할 수 있습니다. 그러나 멀티 테이블 업데이트의 경우 해당 동작이 기본 데이터베이스에 의해 구동되는 구현 차이의 영향을받습니다.
MySQL은 다중 테이블 업데이트 작업을 지원합니다.
UPDATE users u
JOIN logins l ON u.id = l.user_id
SET u.status = 'active'
WHERE l.last_login >= '2025-01-01';
PHP에서는 PDO를 사용하여 유사한 업데이트를 수행 할 수 있습니다.
$sql = "
UPDATE users u
JOIN logins l ON u.id = l.user_id
SET u.status = 'active'
WHERE l.last_login >= :lastLogin
";
$stmt = $pdo->prepare($sql);
$stmt->execute([':lastLogin' => '2025-01-01']);
echo "영향을받는 행의 수: " . $stmt->rowCount();
모든 데이터베이스가 멀티 테이블 업데이트를 지원하는 것은 아닙니다 . 예를 들어 PostgreSQL과 같은 다중 테이블 업데이트를 지원하지 않으며 MySQL 및 MariaDB는 지원합니다.
실제로 수정 된 행만 계산하십시오 . 데이터 행이 조건과 일치하지만 새 값은 원래 값과 동일하면 (예 : 상태 는 원래 '활성' ) RowCount () 로 계산되지 않을 수 있습니다.
데이터베이스 드라이버 차이 : 일부 데이터베이스 및 드라이버가 항상 영향을받는 행의 수를 정확하게 반환하지는 않거나 반환의 의미가 다릅니다. 예를 들어, 일부 버전의 MySQL (또는 특정 SQL 패턴 활성화)은 변경된 실제 행 수보다는 모든 일치하는 행의 수를 반환 할 수 있습니다.
예를 들어 SQL에 결과를 일시적으로 추가하여 디버깅을 지원할 수 있습니다.
$sql = "
UPDATE users u
JOIN logins l ON u.id = l.user_id
SET u.status = 'active'
WHERE l.last_login >= :lastLogin
";
$stmt = $pdo->prepare($sql);
$stmt->execute([':lastLogin' => '2025-01-01']);
$affected = $stmt->rowCount();
if ($affected > 0) {
echo "성공적으로 업데이트되었습니다 {$affected} 기록。";
} else {
echo "기록이 업데이트되지 않았습니다。대상 상태 또는 조건이 일치하지 않았는지 확인하십시오.。";
}
https://gitbox.net 에있는 웹 사이트를 유지하고 있으며 최근 로그인 한 사용자를 활성으로 설정해야한다고 가정 해 봅시다.
$pdo = new PDO('mysql:host=localhost;dbname=mydb', 'user', 'password');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "
UPDATE users u
JOIN logins l ON u.id = l.user_id
SET u.status = 'active'
WHERE l.last_login >= CURDATE() - INTERVAL 30 DAY
";
$stmt = $pdo->prepare($sql);
$stmt->execute();
echo "성공적으로 업데이트하십시오,영향을받는 사용자의 수: " . $stmt->rowCount();
RowCount () 에 의해 반환 된 값은 작업이 성공 여부에 대한 기초로 로그 또는 프론트 엔드 인터페이스로 Fed Back에 기록 될 수 있습니다.
pdostatement :: rowCount ()는 행동 특성과 제한된 조건에 대해 명확한 한 다중 테이블 업데이트를 처리 할 때 여전히 매우 유용한 도구입니다. 사용하는 동안 사용 된 데이터베이스가 관련 SQL 기능을 지원하고 데이터 일관성과 정확한 피드백을 보장하기 위해 추가 논리가 필요한지 여부에주의를 기울이십시오.
https://gitbox.net/docs/pdo-update-joins 에서 멀티-테이블 업데이트 (이 페이지가 있다고 가정)에 대한 더 많은 예와 모범 사례를 찾을 수 있습니다.
관련 태그:
PDOStatement