PHP를 사용하여 데이터베이스를 작동 할 때는 종종 SQL 문을 실행 한 후 얼마나 많은 데이터 행에 영향을 미치는지 알아야합니다. 예를 들어, 업데이트 , 삭제 또는 일부 삽입 작업을 수행 할 때 영향을받는 행의 수를 이해하면 작업이 성공했는지 또는 다음 단계가 필요한지 여부를 결정하는 데 도움이됩니다.
현재 pdostatement :: rowCount () 함수는 편리합니다. 이 기사는 RowCount () 메소드를 사용하는 방법을 소개하고 실제 코드 예제와 결합하여 반환 된 행 수에 따라 조건부 판단을하는 방법을 보여줍니다.
RowCount () 는 마지막으로 실행 된 SQL 문의 영향을받는 행의 수를 반환하는 PDOSTATEMENT 클래스의 방법입니다. 이 함수의 반환 값은 일반적으로 데이터가 실제로 업데이트되는지 삭제되는지 여부를 결정하는 데 사용됩니다.
public int PDOStatement::rowCount();
참고 : RowCount ()는 특히 선택 쿼리에 사용될 때 다른 데이터베이스 드라이버에서 약간 다르게 행동 할 수 있으며, 이는 예상 결과를 반환하지 않을 수 있습니다.
다음은 데이터베이스에서 사용자 정보를 업데이트하는 예입니다. 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();
}
?>
$sql = "DELETE FROM users WHERE last_login < NOW() - INTERVAL 1 YEAR";
$stmt = $pdo->prepare($sql);
$stmt->execute();
if ($stmt->rowCount() > 0) {
echo "비활성 사용자가 성공적으로 삭제되었습니다。";
} else {
echo "삭제할 사용자는 발견되지 않았습니다。";
}
일부 데이터베이스 (예 : 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 "로그 쓰기는 실패하거나 불완전합니다。";
}
Select Queries의 경우 RowCount () 동작이 불확실합니다 . 일반적으로 결과가 있는지 확인하기 위해 FetchAll () 또는 Fetch ()를 사용하는 것이 좋습니다.
올바른 데이터베이스 드라이버 사용 : 일부 데이터베이스 (예 : SQLITE)는 일부 작업에서 rowCount () 에 대한 지원이 제한되어 있습니다.
RowCount () ()가 성공적인 실행의 유일한 부호로 착각하지 마십시오 . 동일한 데이터를 업데이트하면 행 수를 변경하지 않을 수 있기 때문에 "영향을받는 행의 수"를 의미하며 "성공적인 작업"을 의미하지 않습니다.