본문 바로가기
PHP

[PHP] DB에서 특정 행들만 가져오기(7) - DB에서 가져온 정보 출력하기 mysqli_fetch_row()

by LightBlogger 2017. 9. 18.

HTML에서 표를 만드는 태그는 다음과 같다.


<TABLE>
<TR> <TD>셀1</TD> <TD>셀2</TD> </TR>
</TABLE>


<TR> 은 행을 구분지어주고 <TD>는 한 셀을 구분지어준다.


(각각 "Table Row" 와 "Table Data" 의 약자로 생각하면 기억하기 쉽다.)



PHP 문을 <TABLE> </TABLE> 태그로 둘러싸고, 앞서 임시 구분자로 " | " 를 적어놓은 것을 다음과 같이 바꾸자.


<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title></title>
  </head>
  <body>

<TABLE border=1>

<?php

$list = file("list.txt");

$result = mysqli_query($conn, "SELECT * FROM user_data");

$i = 0;
while($i<count($list)){
  $log = $list[$i];
  $log = rtrim($log, "\r\n");

  $row = mysqli_fetch_row($result);
  echo "<TR><TD>",$row[0],"</TD><TD>",$row[1],"</TD><TD>",$row[2],"</TD><TD>",$row[3],"</TD></TR>";

  // echo sprintf("SELECT * FROM user_data WHERE log_num='%d'", $log);
  // echo "</br>";
  $i = $i + 1;
}

 ?>

</TABLE>

  </body>
</html>


결과는 다음과 같다.



표가 성공적으로 출력되었다.


하지만 만일 열이 많다면 이렇게 일일이 써줄 수는 없는 노릇, 반복되는 부분을 찾아보자.


다음 부분이 반복되고 있다.


<TD>",$row[0],"</TD><TD>",$row[1],"</TD><TD>",$row[2],"</TD><TD>",$row[3],"</TD>


<TR> 까지 놓고 반복이 좀더 잘 보이도록 줄바꿈을 하면 다음과 같다.


"<TR>
<TD>",$row[0],"</TD>
<TD>",$row[1],"</TD>
<TD>",$row[2],"</TD>
<TD>",$row[3],"</TD>
</TR>"



이 부분을 while(){} 을 이용하여 좀 더 효율적으로 바꾸어 보자.


$row[0], $row[1], $row[2], $row[3] 를 출력하는 것이므로 $row[$j]로 변수를 지정해 주고 while(){} 을 작성하면 되겠다.


  echo "<TR>";

  $j = 0;

    while($j<4){

      echo "<TD>",$row[$j],"</TD>";

      $j = $j + 1;

      }

  echo "</TR>";


<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title></title>
  </head>
  <body>

<TABLE border=1>

<?php

$list = file("list.txt");

$result = mysqli_query($conn, "SELECT * FROM user_data");

$i = 0;
while($i<count($list)){
  $log = $list[$i];
  $log = rtrim($log, "\r\n");

  $row = mysqli_fetch_row($result);

  echo "<TR>";
  $j = 0;
    while($j<4){
      echo "<TD>",$row[$j],"</TD>";
      $j = $j + 1;
      }
  echo "</TR>";

  // echo sprintf("SELECT * FROM user_data WHERE log_num='%d'", $log);
  // echo "</br>";
  $i = $i + 1;
}

 ?>

</TABLE>

  </body>
</html>


결과는 동일하다.



$j<4 부분도 열이 많아지면 일일이 셀 수 없으므로 '열의 개수만큼' 이라고 지정해 주어야 할 것이다.


mysqli_num_fields() 함수가 주어진 테이블에서 열의 개수를 세는 역할을 담당한다. 


다음과 같이 쿼리 결과를 담은 $result 변수의 열 개수를 세면 되겠다.


  echo "<TR>";
  $j = 0;
    while($j<mysqli_num_fields($result)){
      echo "<TD>",$row[$j],"</TD>";
      $j = $j + 1;
      }
  echo "</TR>";


이제 모든 준비가 완료되었으므로 쿼리 부분을 2017/09/14 - [PHP] - [PHP] DB에서 특정 행들만 가져오기(5) - 변수를 바꾸어 문자열 출력 sprintf() 에서 만들어 놓은 것으로 바꾸어 주자.


매번 쿼리를 바꾸어 가며 질의해야 하므로 mysqli_query() 는 while(){} 안으로 들어와야 함에 주의한다.


<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title></title>
  </head>
  <body>

<TABLE border=1>

<?php

$list = file("list.txt");

$i = 0;
while($i<count($list)){
  $log = $list[$i];
  $log = rtrim($log, "\r\n");
  $result = mysqli_query($conn, sprintf("SELECT * FROM user_data WHERE log_num='%d'", $log));
  $row = mysqli_fetch_row($result);

  echo "<TR>";
  $j = 0;
    while($j<mysqli_num_fields($result)){
      echo "<TD>",$row[$j],"</TD>";
      $j = $j + 1;
      }
  echo "</TR>";

  $i = $i + 1;
}

 ?>

</TABLE>

  </body>
</html>


사실 sprintf() 에 입력한 쿼리 부분도 다음과 같이 나누어 적으면 좀 더 보기 쉽다. 


<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title></title>
  </head>
  <body>

<TABLE border=1>

<?php

$list = file("list.txt");

$i = 0;
while($i<count($list)){
  $log = $list[$i];
  $log = rtrim($log, "\r\n");
  $query = "SELECT * FROM user_data WHERE log_num='%d'";
  $result = mysqli_query($conn, sprintf($query, $log));
  $row = mysqli_fetch_row($result);

  echo "<TR>";
  $j = 0;
    while($j<mysqli_num_fields($result)){
      echo "<TD>",$row[$j],"</TD>";
      $j = $j + 1;
      }
  echo "</TR>";

  $i = $i + 1;
}

 ?>

</TABLE>

  </body>
</html>


결과는 다음과 같다.



프로세스는 이렇다.



$i = 0 으로 while() 이 처음 실행된다.


mysqli_query() 는 $list 의 첫 번째 값으로 쿼리를 DB에 질의하고 결과를 $result 에 담는다.


mysqli_fetch_row() 는 $result 의 첫 행을 가져와 $row 에 배열의 형태로 담는다.


그 다음 while() 문에서 $row 의 각 요소를 출력한다.



$i = 1 로 while() 이 다시 실행된다.


mysqli_query() 는 $list 의 두 번째 값으로 쿼리를 DB에 질의하고 결과를 $result 에 담는다.


mysqli_fetch_row() 는 두 번째 실행되므로 두 번째 행을 가져오는... 게 아니라


$result 가 새롭게 갱신되었으므로, 마치 처음 실행되는 것처럼 갱신된 $result 의 첫 행을 가져와 $row 에 배열의 형태로 담는다.


그 다음 while() 문에서 $row 의 각 요소를 출력한다.



이렇게 해서 PHP 로 원하는 결과를 얻었다. 


다음 포스트에서는 마지막으로 열의 이름을 가져오는 방법을 알아보자.




반응형

댓글