PHP에서는 mysql_affected_rows() 함수를 사용하여 쿼리가 변경한 행의 수를 확인할 수 있습니다. 이 함수는 INSERT, UPDATE, DELETE 등의 쿼리 실행 후 실제로 영향을 받은 행의 개수를 정수로 반환하며, 쿼리 실패 시에는 0 또는 -1을 반환할 수 있습니다.
예제 코드
<html>
<head>
<title>Rows affected by query</title>
</head>
<body>
<?php
$dbhost = 'localhost:3036';
$dbuser = 'root';
$dbpass = 'rootpassword';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn ) {
die('Could not connect: ' . mysql_error());
}
echo 'Connected successfully<br />';
mysql_select_db( 'TUTORIALS' );
$result_id = mysql_query ($query, $conn_id);
# 쿼리가 실패하면 0행으로 보고
$count = ($result_id ? mysql_affected_rows ($conn_id) : 0);
print ("$count rows were affected\n");
?>
</body>
</html>
코드 설명
위 예제의 핵심 로직은 다음 한 줄입니다.
$count = ($result_id ? mysql_affected_rows($conn_id) : 0);
이 코드는 삼항 연산자를 활용하여, 쿼리 실행 결과(result_id)가 성공적이면 mysql_affected_rows() 함수로 영향을 받은 행 수를 가져오고, 실패했다면 0을 할당합니다. 이렇게 하면 쿼리 오류 발생 시에도 안전하게 행 수를 보고할 수 있습니다.
주의 사항: mysql_* 함수는 더 이상 사용되지 않습니다
mysql_* 계열 함수는 PHP 5.5부터 공식적으로 지원 중단(deprecated)되었으며, PHP 7부터는 완전히 제거되었습니다. 따라서 새로운 프로젝트에서는 반드시 아래의 대안을 사용해야 합니다.
- MySQLi 확장: 객체 지향 방식에서는
$mysqli->affected_rows속성을, 절차적 방식에서는mysqli_affected_rows()함수를 사용합니다. - PDO:
PDOStatement::rowCount()메서드를 사용하여 영향을 받은 행 수를 확인할 수 있습니다.
결론적으로, 쿼리로 변경된 행 수를 확인하는 기본 원리는 동일하지만, 최신 환경에서는 MySQLi나 PDO 기반의 문법으로 코드를 작성하는 것이 안전하고 권장됩니다.