접속식별자를 통해 접속을 시도 하게되면 결과만 알수있다.
그후 SQL문 생성한다. 이때 INSERT나 CREATE는 시도하고 성공했는지 실패했는지만 나오고 결과는 출력되지 않는다.
SELECT는 결과를 출력해야 한다. 하지만 echo는 literal이나 특정 변수만 출력이 가능하다. 하지만 DB는 출력 형태가 리소스형태 이기때문에 바로 출력이 불가능하여 echo로 출력이 가능하도록 패치 라는 변환 과정을 진행한다.
mysql은 성능차이가 거의 없지만 array와 all은 성능차이가 있다. 시간복잡도와 자원복잡도(메모리 사용량)은 반비례하는데 이것은 옵티마이다. 옵티마는 가장 적합한 상태이다. array는 처리속도가 all보다는 느리지만 메모리영역 사용량이 적고 all은 처리속도가 array보다 빠르지만 메모리 사용량이 많다.
패치 후에 종료 과정은 free와 close를 사용하는데, 사용하지 않아도 pmon이 자동적으로 종료시켜준다. 하지만 pmon이 종료할때까지 시간과 리소스 절약을 위해 사용하는 것을 권장한다.
함수에 관한 정보는 http://php.net을 참고한다.
resource oci_parse ( resource $connection , string $sql_text )
- SQL문을 파싱(parsing; 계획수립까지만)하고 실행하지는 않는다.
- 오라클 접속 식별자를 반환한다.
bool oci_bind_by_name ( resource $statement , string bv_name , mixed &$var)
- 파싱된 SQL문의 바인드 변수에 값을 제공한다.// 보안에 가장 중요하다.
- 실행 여부를 불린 타입 값으로 반환한다.
bool oci_execute ( resource $statement [, int $mode = OCI_COMMIT_ON_SUCCESS ] )
- SQL문을 실행한다.
- 파싱을 실행하며 Default값은 자동으로 commit하게 되어 롤백이 불가능 하다.
- 함수의 실행 결과는 불린 값으로 반환되지만 SQL문의 실행 결과는 $statement에 반환한다.
array oci_fetch_array ( resource $statement [, int $mode ] )
- oci_execute에서 반환된 결과를 일차원 배열에 패치한다.
- 행이 저장된 일차원 배열을 반환한다.
- 다른 DB와 유사하다.
int oci_fetch_all ( resource $statement , array &$output)
- oci_execute에서 반환된 결과를 이차원 배열에 패치한다.
- 패치된 행의 개수를 반환한다.
- 오라클에서만 가능하다.
bool empty ( mixed $var )
- $var 변수가 NULL인가 확인한다.
패치과정이 없이 입력만 하는 프로그램 작성
conn.php는 DB에 접속하는 프로그램이다. 보안상 실행 가능한 프로그램이어야 한다. 만약 실행이 불가능해진다면 ID나 PW가 노출되는 경우까지 발생할 수 있다.
conn에는 서버에 연결할 계정과 비밀번호를 입력한다.
실습 1 student table을 php를 이용해 웹페이지에서 데이터를 입력한다.
dal서버에 연동됨 : bst09/bst09
cmd에서 데이터 입력 확인
require('conn.php');는 conn.php파일을 불러와서 입력받는다.
$result=oci_parse($conn,$sql); //접속 식별자인 $conn에 따라서 파싱(계획 수립)을 한다. 수립된 파싱값은 리소스 값으로 반환된다.
$re=oci_execute($result); // 파싱을 실행한다.
...
oci_free_statement($result); // 파싱한 메모리를 해지한다.
oci_close($conn); // 프로그램을 종료한다. free와 close는 사용하지 않아도 상관은 없지만 중복사용이나 사용빈도수에 따라서 자동 종료 되는데 시간이 오래걸린다.
...
if($re) echo("정상 입력 되었습니다."); // 참일경우 정상이라는 답변을 출력한다.
else echo("잘못 입력 하셨습니다."); // 에러가 발생할경우 오입되었다는 답변을 출력한다.
echo(" <meta http-equiv='Refresh' content = '0; URL=st_vi.php'>"); // 이 구문이 실행된다면 확인 없이 바로 st_vi.php페이지로 넘어간다.
실습 2 professor table을 php를 이용해 웹페이지에서 데이터를 입력한다.
while( $row = oci_fetch_array($result, OCI_NUM)){
echo("$row[0]-$row[1]-$row[2]-$row[3]-$row[4]-$row[5]<br>");
}
메모리가 출력되면 fetch과정을 거치면서 데이터를 사용자가 볼수있게 바꾼다. fetch는 1차원배열에 데이터가 입력되는 형식으로 진행이 된다. $result에 입력된 데이터 하나씩 $row의 열에 순서대로 입력된다. $row는 행의 갯수만큼 반복되는데 맨 오른쪽 빨간색 화살표의 순서대로 진행되며 행이 더이상 존재하지 않는 n번째가 되면 종료된다.
실습 3student table을 php를 이용해 웹페이지에서 출력한다.
실습 4 professor table을 php를 이용해 웹페이지에서 출력한다.
실습 5 course와score table을 php를 이용해 웹페이지에서 출력하는 프로그램을 작성한다.
실습 6 student와 professor table외의 다른 테이블들의 php를 이용해 웹페이지에서 출력하는 프로그램을 개선하여 작성한다.
'교육 > Php' 카테고리의 다른 글
Day 33 (Php + Oracle) (0) | 2020.01.03 |
---|---|
Day 32(Php + Oracle) (0) | 2020.01.02 |
Day 30 ( php + Oracle) (0) | 2019.12.30 |
Day 30 (php) (0) | 2019.12.30 |
Day 29(php) (0) | 2019.12.27 |