PHP에서 SQL 쿼리 결과 가져오기

이전 수업에서 테스트 코드를 작성했습니다. 데이터베이스에 쿼리를 실행하는 핵심 부분을 상기시켜 보겠습니다:

php<?php
  $query = 'SELECT * FROM users';
  $res = mysqli_query($link, $query) or die(mysqli_error($link));
  var_dump($res);
?>

보시다시피, 데이터베이스 쿼리가 실행된 후, 변수 $res에는 해당 동작의 결과가 담깁니다. 그러나 이 결과는 PHP에서 필요한 형태가 아니라, 데이터베이스가 보내준 형태로 담겨 있습니다.

우리에게 익숙한 형태로 결과를 얻기 위해서는, 결과로부터 한 행을 추출하는 함수 mysqli_fetch_assoc를 사용해야 합니다.

한번 시도해 보겠습니다:

php<?php
  $row = mysqli_fetch_assoc($res);
  var_dump($row);
?>

결과적으로 var_dump는 첫 번째 직원에 대한 배열을 출력할 것입니다:

php<?php
  ['id' => 1, 'name' => 'user1', 'age' => 23, 'salary' => 400]
?>

이때 변수 $res에서 첫 번째 직원 정보는 사라지며, 다음 번 mysqli_fetch_assoc 호출은 이미 다음 직원을 가져옵니다.

직원들이 다 소진될 때까지 이 함수를 계속 호출할 수 있습니다. 직원이 더 이상 없으면 다음 함수 호출은 false를 반환합니다.

한번 시도해 보겠습니다:

php<?php
  $row1 = mysqli_fetch_assoc($res);
  var_dump($row1); // 직원 번호 1
  
  $row2 = mysqli_fetch_assoc($res);
  var_dump($row2); // 직원 번호 2
  
  $row3 = mysqli_fetch_assoc($res);
  var_dump($row3); // 직원 번호 3
  
  $row4 = mysqli_fetch_assoc($res);
  var_dump($row4); // 직원 번호 4
  
  $row5 = mysqli_fetch_assoc($res);
  var_dump($row5); // 직원 번호 5
  
  $row6 = mysqli_fetch_assoc($res);
  var_dump($row6); // 직원 번호 6
  
  $row7 = mysqli_fetch_assoc($res);
  var_dump($row7); // NULL 출력 - 직원이 더 이상 없음
?>