php로 오라클 데이터베이스에 접속 및 조회하는 것에 대해서 알아보겠습니다.

보통 mysql 또는 마리아db를 이용해서 작업을 했는데, 오라클은 이들과 방식이 달라서 당황하는 경우가 있습니다.

당연히 mysql과 마리아는 동일한 것이라고 봐도 무방할 정도니 그렇다 치지만, 오라클은 일반 중소기업 또는 스타트업 같은 곳에서는 잘 사용을 하지 않습니다.

그렇다보니, 우연히 오라클 데이터베이스 작업을 해야하는 경우가 생겼을때 레퍼런스가 별로 없게 됩니다.

 

오라클 접속하기

 

php로 mysql 쪽에 접속을 하기 위해서는 mysqli 같은 것을 사용합니다.

하지만 오라클은 oci_connect 또는 ocilogon 을 사용하는데 ocilogon은 php 5.4 버전부터 deprecated 가 되었으니, oci_connect를 사용하는 것을 추천합니다.

 

oci_connect의 사용방법은 아래와 같이 하면 됩니다.

 

$conn oci_connect('유저id''비밀번호''접속호스트/sid');
if (!$conn) {
    $e = oci_error();
    echo $m['message']";
    exit;
}
else {
    echo "Connected to Oracle!";
}

sid는 서비스 아이디로 데이터베이스 이름을 사용하면됩니다. 접속호스트와 sid 사이에 '/'를 넣어주세요.

만약 접속 호스트가 필요 없다면, sid만 넣으면 됩니다.

 

정상적으로 접속되었다면, Connected to Oracle이 출력될 것입니다.

 

오라클 사용 시 undefined function 에러가 난다면

 

만약 oci_connect가 undefined function이라고 나온다면? 현재 서버의 php에 오라클 모듈이 없어서 그렇습니다.

오라클 클라이언트 다운로드 및 설치 할때 운영체계가 64비트라도 32비트로 해야 한다는 구글링 결과들이 많으니 참고하시기 바랍니다.

그리고 설치 후에 php.ini 파일에 extension=oci8.so 부분이 활성화 되어 있는지 보고 안되어 있다면 앞에 ;을 제거해서 활성화 해주세요.

 

오라클 조회하기

 

오라클 데이터베이스에 연결이 되었다면 이제 필요한 정보를 쿼리해야 합니다.

오라클 쿼리를 하려면 oci_parse라는 함수와 oci_execute를 이용해서 하면 됩니다.

 

$sql = "SELECT * FROM mytable";
$stmt = oci_parse($conn, $sql);
oci_execute($stmt);

 

이렇게하면 mytable의 모든 데이터들을 가져오게 되는데요.

만약 sql에 WHERE 같은 조건절이 있는 경우라면, 그냥 써도 되지만 oci_bind_by_name을 쓸 것을 많이 권유합니다.

조건절을 별도의 변수로 바인딩해서 보안 위협 및 쿼리 효율성을 높이는 과정이라고 하는데요.

간단한 예를 들어서 설명을 해보겠습니다.

 

만약 mytable의 abc 컬럼의 값이 1인 것만 조회한다면 아래와 같이 나옵니다.

 

$sql = "SELECT * FROM mytable WHERE abc=:myval";
$stmt = oci_parse($conn, $sql);
$myval = 1;
oci_bind_by_name($stmt, ":myval", $myval);
oci_execute($stmt);

 

여기서 바인드는 반드시 oci_execute 실행 전에 해줘야 합니다.

 

오라클 반환 값 다루기

 

오라클에 쿼리한 결과를 가지고 이제 사용을 해야하는데요.

이때는 oci_fetch 또는 oci_fetch_array를 사용합니다.

둘다 실행한 쿼리 반환 값을 fetch 하는데요

 

1. oci_fetch 사용

 

oci_fetch의 경우 bool 타입으로 결과 값이 있으면 true 없으면 false를 반환합니다.

true인 경우 oci_resutl($stmt, '컬럼명') 을 이용해서 해당 컬럼의 값을 가져올 수 있습니다.

 

while (oci_fetch($stmt)) {
    echo 
oci_result($stmt'컬럼명');
}

 

2. oci_fetch_array 사용

 

쿼리 반환값을 배열에 저장하는 기능으로 while 을 이용해서 더이상 값이 없을때까지 정보를 반환합니다.

모드 옵션이 다양하게 설정할 수 있지만 가장 기본은 OCI_BOTH입니다.

OCI_BOTH로 설정하면 결과 값을 인덱스 또는 키값을 같이 사용할 수 있습니다.

 

while (( $row = oci_fetch_array ($stmt, OCI_BOTH)) != false ) {     
 echo $row[0]." and ".$row['컬럼명'];
}

 

오라클 결과 정리하기

 

오라클에 조회를 하고 난 다음 $stmt 값에 결과 값이 남아있습니다.

사용을 다 했다면 이 값을 제거해야 됩니다.

이때 사용하는 명령어가 oci_free_statement 입니다. (위에 $stmt는 그냥 선언한 변수니 다른것을 써도 무방합니다. 공통으로만 사용하면 됩니다.)

 

그리고 오라클과 연결을 종료하면 됩니다.

아래과 같이 사용하면 됩니다.

 

oci_free_statement($stid);
oci_close($conn);

처음에는 오라클 사용법이 다소 낯설 수 있지만, 몇번 하다보면 익숙해질 것 같습니다.

php로 오라클을 사용할때 가장 어려운 부분은 아마도 오라클 모듈을 설치하는 것이 아닐까 싶습니다.

추후 시간이 되면 정리해서 올리도록 하겠습니다.

+ Recent posts