php-DB 접속

2019. 12. 30. 12:49Security/language

* PHP를 이용한 DB 접속

DB 연동 프로그램의 구조

Mysql은 오라클에서 파싱하고 익스큐션하는 과정을 mysql_query로 한번에 수행한다.

fetch는 실행한 구문이 select문일때만 수행한다. 

 

1. DB 접속

RDBMS를 이용하기 위해서는 일단 DB에 접속해야 한다. 사용자가 mysql이나 sqlplus와 같은 클라이언트 프로그램으로 DB에 접속하는 것과 같이 PHP는 mysql_connect나 oci_connect등의 함수를 이용해 DB에 접속한다.

클라이언트 : sqlplus php/php@oracle

PHP : $conn=oci_connect("php","php","oracle");

 

2. SQL문 생성

사용하고자 하는 SQL문을 생성한다. 이 단계에서 생성된 SQL문이 SELECT문인 경우와 그렇지 않은 DML이나 DDL등의 문장인 경우 이후 실행과정이 달라진다. 

 

3. SQL 구문 파싱과 실행

RDBMS가 SQL문장을 실행하기 위해서는 SQL문장을 어떻게 실행할지 판단할 파싱과정을 거친다. 이 과정을 통해 RDBMS는 최적의 실행 방법을 찾아내고 SQL문을 찾아낸 실행 방법에 따라 실행한다. 예를 들어 SELECT * FROM student WHERE sname='장비'와 같은 문장을 실행할 때 sname 컬럼에 인덱스가 있다면 student 테이블 전체를 읽는 것 보다는 인덱스를 통해 sname이 장비인 행만을 읽는 것이 효과적일 것이다. 이렇게 가장 비용이 적게 드는 실행방법을 찾아내고 이에 따라 SQL문을 실행 하는 과정이 바로 SQL 구문 파싱과 실행 과정이다. 오라클은 이 과정에서 시스템의 리소스를 절약하기 위해 정적인 SQL구문을 선호한다. 그러나 이를 위해서는 바인드 변수처리를 필요로 하는데 이를 위해 oci_bind_by_name() 함수를 제공한다.

 

4. 결과 패치

SQL문장이 SELECT문 이라면 SQL문을 실행한 이후 검색된 결과가 리소스 형태로 변수에 전달된다. 리소스 타입의 변수는 직접 화면에 출력하는 것이 불가능하므로 검색된 결과를 출력하기 위해 리소스 형태의 정보를 변수로 옮기는 과정을 수행해야 하는데, 이 과정을 패치 과정이라 한다. SELECT문이 아니라 DML이나 DDL문장이라면 검색된 결과가 존재하지 않음으로 정상 수행 여부만을 판단하고 패치는 수행하지 않는다.

 

5. 접속 종료

프로그램이 모두 실행되었음으로 접속을 종료하고 프로그램을 끝내는 과정이다. 많은 수의 프로그램이 종료될 때 DB로의 접속이 자동으로 해제됨으로 명시적인 접속 종료를 쓰지 않는 경우가 많은데, 이런 경우 상당량의 리소스가 뒤늦게 반환되는 문제가 발생한다. 반드시 저장영역을 해제하고 접속을 명시적으로 종료한다.

 

오라클 접속 환경과 PHP 접속하기

서버 프로세서는 네트워크와 관련된 기능중 하나인 리스닝을 하지 않는다. 따라서 리스너를 따로 만들어 준다. 리스너가 없다면 서버 프로세서가 살아있어도 유저프로세서가 서버 프로세서에 접근하지 못 할수도 있다. 

 

2티어 아키텍쳐 : 유저가 직접 서버 프로세서에 직접 접근

3티어 아키텍쳐 : 유저가 어플리케이션을 통해서 서버 프로세서에 접근.

 

3티어 아키텍쳐의 생산성이 훨씬 높기때문에 최근 추세는 대부분 3티어 아키텍쳐로 바뀌어있다. 

 

오라클 접속을 위해 식별해야 될 내용은 다음과 같다.
1. 오라클 서버의 IP와 사용 포트 번호 - 192.168.10.205(1521) 
2. 오라클 SID명 - DB12 
3. 오라클 서버의 접속 식별자 - oracle 
4. 접속 계정과 암호 - php, php

 

oci_connect() 함수를 이용한 오라클 접속

 

httpd.conf 파일에 DirectoryIndex에 oconn.php 추가(바로 인식할 수 있도록)

접속 확인

'Security > language' 카테고리의 다른 글

php-세션  (0) 2020.01.03
php-php와 오라클 연동  (0) 2019.12.31
php-함수  (0) 2019.12.30
php-배열(2차원 배열)  (0) 2019.12.26
php-배열(1차원 배열)  (0) 2019.12.24