데이터베이스 작업에 PHP의 PDO (PHP Data Objects) 확장자를 사용하는 경우 PDostatement :: rowCount () 메소드는 종종 영향을받는 행의 수를 결정하는 데 사용됩니다. 특히 준비된 명령문 (전처리 문)과 함께 사용될 때 RowCount ()를 올바르게 사용하는 것은 엄격한 응용 프로그램 논리를 보장하는 데 중요한 부분입니다. 이 기사는이 시나리오에서 RowCount ()를 사용하는 모범 사례를 소개하고 일반적인 오해를 지적합니다.
RowCount () 메소드는 SQL 문의 마지막 실행에 영향을받는 행 수를 반환하는 데 사용됩니다. 동작은 다양한 유형의 SQL 작업에 따라 약간 다릅니다.
삽입 의 경우, 업데이트 및 삭제 문 : RowCount ()는 영향을받는 행의 수를 반환합니다.
선택 문 : 모든 데이터베이스 드라이버가 반환 행 카운트를 지원하는 것은 아닙니다. 리턴 값은 일부 드라이버 (예 : MySQL)에서는 신뢰할 수 없습니다.
많은 개발자가 선택 쿼리 후 RowCount ()를 사용하여 결과 수를 얻으려고합니다.
$stmt = $pdo->prepare("SELECT * FROM users WHERE status = ?");
$stmt->execute(['active']);
$count = $stmt->rowCount(); // 예상 값을 반환하지 않을 수 있습니다
권장하지 않습니다. 선택 쿼리의 경우 더 안전하고 신뢰할 수있는 방법은 다음과 같습니다.
$rows = $stmt->fetchAll();
$count = count($rows);
이를 통해 실제로 데이터 양을 반환 할 수 있습니다.
RowCount () 동작은 데이터베이스 중심의 종속입니다. 예를 들어, PostgreSQL에서 RowCount ()는 SELECT 에 유효하지만 MySQL에서는 그렇지 않습니다. 개발 중에 대상 데이터베이스를 기반으로 호환 처리가 필요합니다.
$pdo = new PDO("mysql:host=localhost;dbname=example", "user", "password");
$stmt = $pdo->prepare("UPDATE products SET price = ? WHERE id = ?");
$stmt->execute([99.99, 42]);
if ($stmt->rowCount() > 0) {
echo "성공적으로 업데이트하십시오,영향을받는 행의 수:" . $stmt->rowCount();
} else {
echo "데이터가 업데이트되지 않았습니다。";
}
$stmt = $pdo->prepare("DELETE FROM sessions WHERE last_active < NOW() - INTERVAL 30 DAY");
$stmt->execute();
if ($stmt->rowCount() > 0) {
echo "청소 " . $stmt->rowCount() . " 만료 된 세션。";
} else {
echo "청소할 세션이 없습니다。";
}
때로는 SQL 실행이 성공하지만 rowCount ()는 0을 반환합니다. 이는 일반적으로 작업이 행을 변경하지 않음을 의미합니다. 예를 들어, 업데이트 명령문은 열의 값을 동일한 값으로 설정하려고 시도하며,이 경우 행은 "영향을받는"것으로 간주되지 않습니다.
SQL 로그를 활성화하거나 유사한 방법을 사용하여 디버깅을 지원할 수 있습니다.
$stmt = $pdo->prepare("UPDATE users SET name = :name WHERE id = :id");
$stmt->execute(['name' => 'Alice', 'id' => 10]);
echo "SQL 성공적으로 실행,영향을받는 행의 수:" . $stmt->rowCount();
RowCount () 와 관련이 없지만 관련이 있으면 항상 권장됩니다.
SQL 주입을 방지하기 위해 바인딩 파라미터 ( ? 또는 명명 된 매개 변수)를 사용하십시오.
pdoexception 처리 오류를 잡으십시오.
적절한 PDO 오류 모드 설정 :
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
프로젝트에서 데이터 작업을 더 잘 관리하려면 통합 데이터 추상화 계층을 채택하고 필요한 경우 로깅 메커니즘을 추가하는 것이 좋습니다. 예를 들어:
// 로깅 시스템이 있다고 가정 해 봅시다 URL
$logUrl = "https://gitbox.net/logs/db-activity";
도메인 이름 및 인터페이스 보안을 제어하는 경우 중요한 작업을 수행 할 때 영향을받는 행 및 SQL 문 컨텐츠 수를 모니터링하기 위해 인터페이스로 보낼 수 있습니다.
관련 태그:
PDOStatement