"PHP에서 오라클 쿼리"의 두 판 사이의 차이

잔글 (PHP에서 오라클 접속 문서를 PHP에서 오라클 쿼리(으)로 옮기면서 넘겨주기를 덮어 씀)
(차이 없음)

2012년 9월 5일 (수) 15:16 판

PHP에서 오라클 접속
PHP에서 오라클 쿼리

1 소스 코드

<?php
function xmp_print_r($arr) { echo '<xmp>'; print_r($arr); echo '</xmp>'; }
function oci_query($query) {
  $conn = oci_connect('사용자명', '비밀번호', 'DB서버명/서비스명', 'UTF8');
  if(!$conn) die('cannot connect: '.oci_error());
  $stid = oci_parse($conn, $query);
  if(!$stid) die('oci parse error: ' . oci_error($conn));
  if(oci_execute($stid) === false) die("oci query error [ $query ] message : ".oci_error($stid));
  oci_fetch_all($stid, $arr, null, null, OCI_FETCHSTATEMENT_BY_ROW);
  oci_close($conn);
  return $arr;
}
$q = "SELECT 'A1' COL1, 'A2' COL2 FROM DUAL";
$q .= " UNION ALL "; 
$q .= "SELECT 'B1' COL1, 'B2' COL2 FROM DUAL";
$arr = oci_query($q);
xmp_print_r($arr);
?>

2 브라우저 확인 (실패)

브라우저로 test_ora.php에 접속해보자.

Warning: oci_connect(): ORA-24408: could not generate unique server group name in /var/www/html/test_ora.php on line 4 cannot connect: Array
→ 웹서버가 DB서버에 접속하지 못했다.

소스를 살펴보면...

 $conn = oci_connect('testuser', 'P@ssw0rd', '111.222.33.44/MYSVC', 'UTF8');
→ oci_connect는 IP를 받아주지 않는다. 호스트명 형식으로 기입해야 한다.
 $conn = oci_connect('testuser', 'P@ssw0rd', 'oracledb01/MYSVC', 'UTF8');
→ 형식은 맞지만 oracledb01 = 111.222.33.44 이라는 정보가 없기 때문에 연결이 되지 않는다. hosts 설정이 필요하다.[1]

3 hosts 파일 설정

명령어
echo -e "아이피\t호스트명" >> /etc/hosts
→ DB서버의 아이피와 호스트명을 기입한다.
실행예시
[root@jmnote ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
[root@jmnote ~]# echo -e "111.222.33.44\toracledb01" >> /etc/hosts
[root@jmnote ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
111.222.33.44	oracledb01

4 결과

브라우저에서 test_ora.php에 접속해보자.

Array
(
    [0] => Array
        (
            [COL1] => A1
            [COL2] => A2
        )

    [1] => Array
        (
            [COL1] => B1
            [COL2] => B2
        )

)

5 같이 보기

6 주석

  1. tnsnames.ora에 지정해두어도 되는 모양이지만...

7 참고 자료

문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}