본문 바로가기
Infra & Security Eng/Programming

[PHP] oci_fetch_all의 2차원 배열 구조 해석 하기

by 엔지니어 E 2026. 3. 24.
반응형

<?php

  echo("<a href=./st_in.html>자료 입력하기</a><hr>");
* 화면에 "자료 입력하기" 링크를 만들고 가로줄(<hr>)을 긋는다
  require('conn.php');
* DB 접속 정보가 담긴 파일을 불러온다
  $sql="select sno, sname, sex, major, syear, to_char(avr,'0.00') avr 
        from student order by sno";  
* 실행할 SQL 문장을 준비한다 (oder by sno: 학번순으로 정렬)
  $result=oci_parse($conn,$sql); 
* SQL 문장을 오라클이 이해할 수 있게 분석(parse)함
  oci_execute($result);  
  $row_num=oci_fetch_all($result, $row);  
* 데이터를 통째로 뽑아서 $row라는 2차원 배열 주머니에 넣고,  $row_num에는 "전체 데이터가 몇 줄인지" 숫자가 저장
  oci_free_statement($result);  
* DB 사용이 끝났으므로 메모리를 비우고 접속을 끊음
  oci_close($conn);


  echo("Row의 개수는 $row_num 입니다.<br>");

 
  echo("<table border=1>");
*  표(Table)를 시작
  for($i=0; $i<$row_num; $i++) {
* ★핵심: 반복문 (for) - 여기서 데이터를 한 줄씩 표로만든다
* $i가 0부터 시작해서 전체 줄 수($row_num)보다 작을 때까지 하나씩 늘어나며 반복함
* 표의 가로 한 줄(Row)을 시작함
      echo("<td> {$row['SNO'][$i]} </td>");   // 첫 번째 칸: 학번
      echo("<td> {$row['SNAME'][$i]} </td>"); // 두 번째 칸: 이름
      echo("<td> {$row['SEX'][$i]} </td>");   // 세 번째 칸: 성별
      echo("<td> {$row['SYEAR'][$i]} </td>"); // 네 번째 칸: 학년
      echo("<td> {$row['MAJOR'][$i]} </td>"); // 다섯 번째 칸: 학과
      echo("<td> {$row['AVR'][$i]} </td>");   // 여섯 번째 칸: 평점
* 주머니($row) 안에 있는 '학번(SNO 등)' 칸에서 '$i번째' 데이터를 꺼내라"는 뜻임

      echo("</tr>")
  }       

  echo("</table>");
?>
★ 참고 (  for($i=0; $i<$row_num; $i++) ) - $i<$row_num인 이유

컴퓨터는 0부터 세지만 row_num(번호=인덱스)는 말그대로 데이터의 총 개수이기 때문에 3이 된다 그래서 1부터 세기 때문에  $i 보다 작아야 한다