열 이름을 가져올 때 mysqli_fetch_field() 등의 새로운 함수를 사용할 수도 있겠지만,
앞서 본 개념만으로도 열 이름을 가져올 수 있다.
이때 쿼리 중에 SHOW COLUMNS 명령이 유용하다.
SHOW COLUMNS FROM user_data
DB에 "SHOW COLUMNS FROM user_data" 를 질의하면 위와 같은 테이블을 반환해 준다.
이제 mysql_fetch_row() 로 이 중 첫 번째 열에 있는 값들만 가져오면 되겠다.
다음을 입력해 보자.
$query = "SHOW COLUMNS FROM user_data";
$result = mysqli_query($conn, $query);
while($row = mysqli_fetch_row($result)){
echo $row[0];
}
<?php $conn = mysqli_connect("localhost", "root", "123456789"); mysqli_select_db($conn, "test"); ?> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> </head> <body> <TABLE border=1> <?php $list = file("list.txt"); $query = "SHOW COLUMNS FROM user_data"; $result = mysqli_query($conn, $query); while($row = mysqli_fetch_row($result)){ echo $row[0]; } $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>
결과는 다음과 같다.
표 위쪽에 열 이름이 반환되는 것이 보인다.
이제 표 모양으로 만들기 위해 <TR> 과 <TD> 를 다음과 같이 추가해 주자.
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> </head> <body> <TABLE border=1> <?php $list = file("list.txt"); $query = "SHOW COLUMNS FROM user_data"; $result = mysqli_query($conn, $query); echo "<TR>"; while($row = mysqli_fetch_row($result)){ echo "<TD>",$row[0],"</TD>"; } echo "</TR>"; $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>
결과는 다음과 같다.
여기서 새롭게 추가한 while(){} 문이 조금 생소할 수 있다.
조건에 ($i<4) 같은 것 대신 ($row = mysqli_fetch_row($result)) 가 들어있기 떄문이다.
$row = mysqli_fetch_row($result) 는 왠지 while문의 조건 부분이 아니라 중괄호 안쪽에 들어와 있어야 하는 것 같은데 말이다.
원리는 이렇다.
$row = mysqli_fetch_row($result) 는 while문의 중괄호 안에서와 마찬가지로 $result 의 첫 행을 가져온다.
그럼 조건은?
$row 에 어쨌든 값이 있으므로 while 문은 일단 실행된다. PHP 는 '값이 있음' 을 'TRUE' 와 동일하게 생각한다.
조건이 TRUE 이므로row[0] 는 첫 번째 행의 첫 번째 값을 출력하고 다시 돌아 mysqli_fetch_row() 는 $result 의 두 번째 행을 가져온다.
역시 값이 있으므로(TRUE) while 문은 실행되고, row[0] 는 두 번째 행의 첫 번째 값을 출력한다.
이렇게 네 번 돌고 나서 mysqli_fetch_row() 는 $result 의 다섯 번째 행을 가져오려 하는데
$result 에는 다섯 번째 행이 없다. 고로 $row 에는 아무것도 담기지 않는다. 이때 PHP 는 '값이 없음' 을 'FALSE'로 생각한다.
하여 while 의 조건 안이 FALSE 가 되고 while 문은 종료되는 것이다.
이것을 이용해 while() 문을 조금 더 효율적으로 적을 수 있다.
'PHP' 카테고리의 다른 글
[PHP] 회원들의 재구매율 알아보기(4) - 완성 (0) | 2017.10.13 |
---|---|
[PHP] 회원들의 재구매율 알아보기(3) - 날짜 계산하기 strtotime() (0) | 2017.09.26 |
[PHP] 회원들의 재구매율 알아보기(2) - 두 배열 비교하기 in_array() (0) | 2017.09.25 |
[PHP] 회원들의 재구매율 알아보기(1) - MySQL 컬럼(열)을 배열로 만들기 (0) | 2017.09.24 |
[PHP] mysqli_fetch_row, assoc, array 의 차이 (4) | 2017.09.20 |
[PHP] DB에서 특정 행들만 가져오기(7) - DB에서 가져온 정보 출력하기 mysqli_fetch_row() (0) | 2017.09.18 |
[PHP] DB에서 특정 행들만 가져오기(6) - 쿼리 작성하기 mysqli_query() (0) | 2017.09.17 |
[PHP] DB에서 특정 행들만 가져오기(5) - 변수를 바꾸어 문자열 출력 sprintf() (0) | 2017.09.14 |
[PHP] DB에서 특정 행들만 가져오기(4) - 반복문 while(){} (0) | 2017.09.13 |
[PHP] DB에서 특정 행들만 가져오기(3) - 목록 읽어오기 file() (0) | 2017.09.12 |
댓글