본문 바로가기

프로그래밍/Server

[PHP] fetch_row(), fetch_assoc(), fetch_array()

fetch_row()

  • 인덱스 번호로 배열 요소들을 가져온다.
  • 예를 들어서 다음과 같은 SELECT문이 있다고 하자.
SELECT transaction_date, total_amount FROM sales WEHRE MONTH(transaction_date) = MONTH(NOW())

 

이 쿼리문을 실행하여 fetch_row()로 배열 요소를 가져오면 거래 날짜는 0번, 총 금액은 1번 인덱스를 가지게 된다.

$sql = "SELECT transaction_date, total_amount
        FROM sales
        WHERE MONTH(transaction_date) = MONTH(NOW())";
        
$result = $connect->query($sql);

while($row = $result -> fetch_row()){
    echo "거래 날짜 : " . $row[0] . "\n" .
    "총 금액 : ". $row[1] . "\n";
}

 

위와 같이 실행하면 다음과 같은 결과가 나온다.

 

fetch_assoc()

  • associative array(연관 배열)의 약자로 컬럼명으로 배열 요소들을 가져온다.
while($assoc = $result -> fetch_assoc()){
    echo "거래 날짜 : " . $assoc['transaction_date'] . "\n" .
         "총 금액 : ". $assoc['total_amount'] . "\n";
}

 

 

가져오는 방법만 달라졌지 값은 동일하다.

 

fetch_array()

  • 인덱스 번호와 컬럼명 모두를 지원한다. 
while($array = $result -> fetch_array()){
    echo "(인덱스) 거래 날짜 : " . $array[0] . "\n" .
    "(인덱스) 총 금액 : ". $array[1] . "\n";
}

while($array = $result -> fetch_array()){
    echo "(컬럼명) 거래 날짜 : " . $array['transaction_date'] . "\n" .
         "(컬럼명) 총 금액 : ". $array['total_amount'] . "\n";
}

 

 

다만,배열의 길이로 반복문을 실행하는 경우 주의해야한다.

$row = $result -> fetch_row();
$assoc = $result -> fetch_assoc();
$array = $result -> fetch_array();

echo "row count : " . count($row) . "\n";
echo "assoc count : " . count($assoc) . "\n";
echo "array count : " . count($array);

 

 

요소는 3개의 배열 모두 거래 시간, 총 금액으로 같지만 array 같은 경우는 인덱스 번호와 컬럼명을 모두 지원하기 때문에 요소 크기가 2배가 된다.

 

따라서 array의 길이로 반복문을 실행하여 조회하면 원래의 요소 2개를 넘어가게 되면 조회가 되지 않는다.