목차
1. PHP - DB 접속
1-1 DB 연동 프로그램의 구조
1-2 오라클 접속 환경과 PHP 접속하기
1. PHP - DB 접속
1-1 DB 연동 프로그램의 구조
오라클 연동 | MySQL 연동 | ||
1 | DB 접속 | oci_connect | mysql_connect mysql_select_db |
2 | SQL 생성 | ||
3 | SQL 구문 파싱 | oci_parse | mysql_query |
4 | SQL 구문 실행 | oci_bind_by_name oci_execute |
|
5 | 결과 패치 | oci_fetch_array oci_fetch_all |
mysql_fetch_row mysql_fetch_array |
6 | 접속 종료 | oci_free_statement oci_close |
mysql_close |
① DB 접속
RDBMS를 이용하기 위해서는 일단 DB에 접속해야 한다. 사용자가 mysql이나 sqlplus와 같은 클라이언트 프로그램으로 DB에 접속하는 것과 같이 PHP는 mysql_connect나 oci_connect등의 함수를 이용해 DB에 접속한다.
'oracle' 이라는 DB에 'php'라는 계정으로 (해당 계정의 패스워드: php) 접속하려는 경우 쓰는 문장은 다음과 같다.
오라클 | 클라이언트 | $ sqlplus php/php@oracle |
PHP | $conn=oci_connect("php","php","oracle"); |
MySQL | 클라이언트 | $ mysql -u php -pphp –h localhost mysql> use php |
PHP | $ conn=mysql_connect("localhost","php","php"); mysql_select_db("php",$conn); |
② SQL문 생성
사용하고자 하는 SQL문을 생성(= 입력)한다. 이 단계에서 생성된 SQL문이 SELECT문인 경우와 그렇지 않은 DML이나 DDL등의 문장인 경우 이후 실행과정이 달라진다.
③ SQL 구문 파싱과 실행
RDBMS가 SQL문장을 실행하기 위해서는 SQL문장을 어떻게 실행할지 판단하는 파싱 과정을 거친다. 실행 방법을 찾아낸 후 그 방법에 따라 실행한다.
ex) select * from student where sname = '준호' 의 경우 인덱스를 통해 sname이 준호인 행만을 읽는 것 이 효과적임을 찾아내고 이에 따라 실행한다.
④ 결과 패치
정보를 화면에 출력하기 위해서는 사람이 알아볼 수 없는 리소스 형태의 정보를 변수나 배열에 담아 사람이 알아볼 수 있도록 출력하는 패치 과정을 거친다.
SQL문장이 SELECT문 이라면 SQL문을 실행한 이후 검색된 결과가 리소스 형태로 변수에 전달된다. SELECT문이 아니라 DML이나 DDL문장이라면 검색된 결과가 존재하지 않으므로 정상 수행 여부만을 판단하고 패치는 수행하지 않는다.
⑤ 접속 종료
프로그램이 모두 실행되었으므로 접속을 종료하고 프로그램을 끝내는 과정이다. 명시적으로 종료하지 않는 경우 상당량의 리소스가 뒤늦게 반환될 수 있으므로 반드시 접속을 명시적으로 종료한다.
1-2 오라클 접속 환경과 PHP 접속하기
오라클 접속을 위해 다음과 같은 내용을 식별해야 한다.
① 오라클 서버의 IP와 사용 포트 번호
② 오라클 SID명
③ 오라클 서버의 접속 식별자
④ 접속 계정과 암호
항목 | 설정 값 |
IP | 192.168.10.123 (mysecurity.com) |
Port | 1234 |
SID | DB12 |
TNS 명 | oracle |
계정/패스워드 | php/php |
● oci_connect() 함수를 이용한 오라클 접속
resource oci_connect (string $username, string $password [, string $connection_string [, string $character_set [, int $session_mode]]] )
매개변수 | 의미 |
$username | 접속 계정 |
$password | 패스워드 |
$connection_string | 오라클 네트워크 식별자 |
$character_set | 접속 문자 코드 기본값: NLS_LANG에 정의한 값 |
$session_mode | 접속 권한 지정 |
대괄호 안의 내용은 선택적 매개변수이며, 대괄호 안의 반점은 각 파라미터가 독립적임을 나타낸다.
접속 식별자등의 내용을 tnsnames.ora 파일에 저장해둔 경우에 다음과 같이 TNS명을 이용해서 접속 프로그램을 작성 할 수 있다.
// tnsnames.ora 파일 내용 예시
oracle =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = tcp)(HOST = 192.168.10.123)(port = 1234))
(CONNECT_DATA = (SID = DB12))
)
// tns명을 이용해 접속하는 경우
$user_name = "php";
$password = "php";
$server = "oracle";
$conn=oci_connect($user_name, $password, $server);
// 접속 식별자를 직접 입력해 접속하는 경우
$user_name = "php";
$password = "php";
$server = "(DESCRIPTION =
(ADDRESS = (PROTOCOL = tcp)(HOST = 192.168.10.123)(port = 1234))
(CONNECT_DATA = (SID = DB12))
)";
$conn=oci_connect($user_name, $password, $server);
tnsnames.ora 파일 이용이 불가한 경우 위와 같이 직접 접속 정보를 입력할 수 있다. 특히 접속에 장애가 많이 발생하는 경우, 장애 테스트 때마다 tnsnames.ora 파일을 편집하는 것보다는 소스 내에 직접 네트워크 정보를 제공하면 문제를 파악하기 쉽다.
다음과 같이 오라클 접속을 위한 php 코드를 작성할 수 있다.
<?
$server = "oracle";
$user_name = "php";
$password = "php";
$conn=@oci_connect($user_name, $password, $server) or die('Could not connect:');
echo("Oracle 19c \$conn : $conn<br>");
$st=oci_server_version($conn);
echo("$st<br>");
?>
5행의 문장은 or 앞 문장을 우선 실행하고 실행이 안된다면 뒷 문장을 실행하도록 하는 것이다.
6행에서 $conn의 내부 값을 출력시켜도 resource id라고 출력되면 내부 값은 알려주지 않는다.
7~8행은 현재 접속된 서버의 버전을 출력한다.
'일일 정리' 카테고리의 다른 글
테이블 생성과 데이터 타입(DDL), 테이블 관리, 제약 조건 : PK, FK (0) | 2025.03.18 |
---|---|
Samba (1) | 2025.03.10 |
DML - INSERT, UPDATE, DELETE, Transaction과 Lock (0) | 2025.03.06 |
NFS, 그룹 함수와 HAVING (0) | 2025.03.05 |
APACHE - 가상 호스트, 단일 행 함수 날짜 함수, 단일 행 함수 변환 함수, 그룹 함수와 GROUP BY (0) | 2025.03.04 |