pdostatement :: rowCount () 는 PHP에서 PDO를 사용하여 데이터베이스를 작동 할 때 일반적이지만 종종 오해되는 방법입니다. 특히 업데이트 또는 삭제 명령문을 실행 한 후에는 종종 데이터를 "업데이트"했는지 또는 "삭제"되었는지 여부를 결정합니다. 그러나 당신은 그 뒤에있는 행동의 세부 사항을 알고 있습니까?
$pdo = new PDO('mysql:host=localhost;dbname=test', 'user', 'password');
$sql = "UPDATE users SET status = 'active' WHERE last_login > :date";
$stmt = $pdo->prepare($sql);
$stmt->execute([':date' => '2024-01-01']);
echo "업데이트 " . $stmt->rowCount() . " 라인 레코드";
이 코드는 RowCount ()를 사용하여 실제 행 수를 영향을받는 업데이트 문을 실행합니다.
DML에 대해서만 유효합니다 : rowCount ()는 삽입 , 업데이트 및 삭제 후 영향을받는 행 수를 올바르게 반환 할 수 있습니다. 그러나 Select 의 경우 MySQL 드라이버는 일반적으로 0을 반환합니다.
데이터 변경과 관련하여 : 대상 행 데이터가 실제로 변경되지 않으면 rowCount () 가 반환 할 수 있습니다 (즉, 새 값은 이전 값과 동일). 이것은 pdo가 아닌 MySQL 동작의 문제입니다.
"행의 수"와 같지 않습니다 . "실제로 변경되는 행의 수"가 아닌 "실제로 변경되는 행의 수"가 아닙니다.
$sql = "UPDATE users SET email = :email WHERE id = :id";
$stmt = $pdo->prepare($sql);
$stmt->execute([':email' => '[email protected]', ':id' => 1]);
if ($stmt->rowCount() > 0) {
echo "사용자 정보가 업데이트되었습니다";
} else {
echo "업데이트가 없습니다,데이터가 변경되지 않았거나 ID 존재하지 않습니다";
}
RowCount () 의 동작을 마스터하면 비즈니스 논리가보다 엄격하게 만들어지고 데이터베이스 작업이 적용되는지 여부를 잘못 판단하지 않을 수 있습니다. 더 많은 예는 https://gitbox.net/docs/pdo-update를 참조하십시오.