본문 바로가기
PHP

[PHP] mysqli_fetch_row, assoc, array 의 차이

by LightBlogger 2017. 9. 20.

2017/09/18 - [PHP] - [PHP] DB에서 특정 행들만 가져오기(7) - DB에서 가져온 정보 출력하기 mysqli_fetch_row()에서 본 대로


mysqli_fetch_row() 는 다음과 같이 배열의 번호로 요소를 출력할 수 있다.



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

<?php

$query = "SELECT * FROM user_data";
$result = mysqli_query($conn, $query);
$row = mysqli_fetch_row($result);
echo "<TABLE BORDER=1><TR>",
      "<TD>",$row[0],"</TD>",
      "<TD>",$row[1],"</TD>",
      "<TD>",$row[2],"</TD>",
      "<TD>",$row[3],"</TD>",
      "</TR></TABLE>"

 ?>

  </body>
</html>




mysqli_fetch_assoc() 의 assoc은 연관배열associative array 의 약자로,


다음과 같이 필드명(열이름, 키값)을 통해 데이터를 호출할 수 있다.


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

<?php

$query = "SELECT * FROM user_data";
$result = mysqli_query($conn, $query);
$row = mysqli_fetch_assoc($result);
echo "<TABLE BORDER=1><TR>",
      "<TD>",$row['log_num'],"</TD>",
      "<TD>",$row['user_id'],"</TD>",
      "<TD>",$row['date'],"</TD>",
      "<TD>",$row['product'],"</TD>",
      "</TR></TABLE>"

 ?>

  </body>
</html>




mysqli_fetch_array() 는 두 방식 모두 사용할 수 있다.


즉 키값과 번호 중 아무 것이나 사용해도 무방하다.



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

<?php

$query = "SELECT * FROM user_data";
$result = mysqli_query($conn, $query);
$row = mysqli_fetch_array($result);
echo "<TABLE BORDER=1><TR>",
      "<TD>",$row[0],"</TD>",
      "<TD>",$row['user_id'],"</TD>",
      "<TD>",$row['date'],"</TD>",
      "<TD>",$row[2],"</TD>",
      "</TR></TABLE>"

 ?>

  </body>
</html>




다만 주의할 것이, mysqli_fetch_array 이 담고 있는 요소의 수는 원래 배열의 두 배가 될 수 있다.


다음과 같이 mysqli_fetch_row 와 mysqli_fetch_array 각각의 배열을 출력하라고 명령(print_r) 해 보자.



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

<?php

$query = "SELECT * FROM user_data";

$result = mysqli_query($conn, $query);
$row = mysqli_fetch_row($result);

$result = mysqli_query($conn, $query);
$arr = mysqli_fetch_array($result);

print_r($row);
echo "</br>";
print_r($arr);

 ?>

  </body>
</html>




mysqli_fetch_row 는 필드명(키값)이 0, 1, 2, 3 이지만,


mysqli_fetch_array 는 필드명이 0, log_num, 1, user_id, 2, product, 3, date 와 같이 매겨져 있다.



표로 표현하면 다음과 같다.





그래서 mysqli_fetch_array()는 필드명과 번호로 둘 다 호출할 수 있는 것이다.



이렇게 요소의 수가 다른 것은 다음과 같이 while() 을 쓴다면 문제가 될 수 있다.


mysqli_fetch_row 는 요소의 개수가 4개이므로 count($row)를 사용하면 다음과 같이 결과가 나오지만



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

<?php

$query = "SELECT * FROM user_data";

$result = mysqli_query($conn, $query);
$row = mysqli_fetch_row($result);

$i = 0;
echo "<TABLE border=1><TR>";
while($i<count($row)){
  echo "<TD>",$row[$i],"</TD>";
  $i = $i + 1;
}
echo "</TR></TABLE>";

 ?>

  </body>
</html>




mysqli_fetch_array 는 count($row) 를 사용할 경우 결과는 다음과 같다.



<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> </head> <body> <?php $query = "SELECT * FROM user_data"; $result = mysqli_query($conn, $query); $row = mysqli_fetch_array($result); $i = 0; echo "<TABLE border=1><TR>"; while($i<count($row)){ echo "<TD>",$row[$i],"</TD>"; $i = $i + 1; } echo "</TR></TABLE>"; ?> </body> </html>



count($row) 는 4가 아니라 8이며,


while() 은 row[0] 부터 row[3] 까지는 값을 출력하다가 row[4] 부터 row[7] 까지는 에러를 출력하게 된다.




반응형

댓글