코딩짜는 일상

[PHP] mysql_fetch_array와 mysql_fetch_assoc 차이 - print_r 출력 차이 본문

IT/PHP

[PHP] mysql_fetch_array와 mysql_fetch_assoc 차이 - print_r 출력 차이

Remily 2022. 5. 6. 16:24
반응형

mysql_fetch_arraymysql_fetch_assoc를 보면
둘은 쓰는 방식도 똑같은데 왜 함수가 2가지일까,
둘의 차이가 대체 뭘까 고민을 했습니다.

print_r을 써보면 확실하게 차이를 알 수 있다길래 해봤습니다.


출력할 테이블

idx name age
1 emily 20
3 nick 35
5 json 14
     

SELECT * FROM member oder by idx asc;



 


mysql_fetch_array (PHP 5 이전)

(= mysqli_fetch_array 또는 fetch_array )

Array
(
    [0] => 1
    [idx] => 1
    [1] => emily
    [name] => emily
    [2] => 20
    [age] => 20
)



mysql_fetch_assoc (PHP 5 이전)

(= mysqli_fetch_assoc 또는 fetch_assoc )

Array
(
    [idx] => 1
    [name] => emily
    [age] => 20
)




결론

둘 다 for, while, foreach 같은 반복문으로 다음 row를 불러와야 하는 건 같습니다.


하지만 각각의 장단점이 있습니다.


array는 칼럼명 말고도 숫자를 써서 불러내는 것이 가능합니다.

$row['name'] = emily
$row['1'] = emily


만약 칼럼의 갯수가 많고 페이지에 우리가 보는 SQL 테이블처럼

 한 row의 정보를 모두 꺼내 표처럼 볼 거라면 이런 것도 가능하죠.

<tbody>
<tr>
  <?php
foreach($row1 as $a => $b){
    for($i=0; $rows=$row1[$a][$i]; $i++){ ?>
    <td><?php print_r($row1[$a][$i]); ?></td>
  <?php
    }
} ?>
</tr>
</tbody>

단점은 같은 row를 2번 불러온 것과 같아서 서버에 부하가 커진다는 점입니다.


 

반면, assoc은 칼럼명으로만 불러올 수 있습니다.

$row['name'] = emily

 

페이지에 칼럼을 선택해 불러올 거라면 assoc가 나을 수 있습니다.
서버의 부하도 적다는 것이 장점입니다.

 

다만 칼럼명을 바꾼다면 코드도 같이 바꿔줘야하는 단점이 있겠죠.
(사실상 잘 없는 일이라 assoc를 주로 씁니다.)

반응형