그누보드 오라클 연동 기본 lib 파일

영카트랑 oracle 이랑 연동해야 할 일이 있어서 간단히 만들어보았습니다.
가능한 영카트 기본 함수에 충실하도록 작성하였습니다.

함수 비교
기존 함수 ==> 오라클용 함수
sql_connect          ==> sql_oci_connect
sql_select_db        == > 없음
sql_query              ==> sql_oci_query
sql_fetch               ==> sql_oci_fetch
sql_fetch_array      ==> sql_oci_fetch_array
sql_free_result       ==>  sql_oci_free_result
- 추가함수
sql_oci_paging
set_lowercase (오라클 쿼리시 db컬럼명이 대문자가 디폴트입니다. 소문자로 변경해줍니다.)

오라클에서 페이징시에 limit를 지원하지 않음으로, 페이징 하는 부분은 따로 함수를 호출해주세요.

기존 그누보드 페이징
$result = sql_query("select * from board limit $from_record, $rows ");

오라클 사용시 페이징
$result = sql_oci_paging($sql, $from_record, $rows);


* 사용방법
- 오라클에 쿼리를 해야 하는 페이지에 아래와 같이 추가
include_once("$g4[path]/lib/common.oralib.php"); //오라클 공통
sql_oci_connect();

- connection 해제를 위해 하단에 아래와 같이 추가
sql_oci_free_result();

- 오라클db의 인코딩과 그누보드의 인코딩이 틀리다면, connection 할때 인코딩 방법을 지정하세요. utf-8인 경우 AL32UTF8


<?
if (!defined('_GNUBOARD_')) exit;

/*************************************************************************
**
** 오라클 DB 관련 함수 모음
**
*************************************************************************/
$oci_conn;   //db conncion
$oci_result;  //result set
$oci_stmt; //statement
$oci_error; //error
$oci_fetch_mode = OCI_ASSOC;

// DB 연결
function sql_oci_connect()
{
    global $g4, $oci_conn;

   $oci_conn = oci_connect( "scott", "tiger", "", "인코딩방법");
   return $oci_conn;
}

// oracle 쿼리 처리
function sql_oci_query($sql, $error=TRUE)
{
 global $oci_conn;
 $oci_stmt = oci_parse($oci_conn, $sql);
 
    if ($error) {
        @oci_execute($oci_stmt, OCI_COMMIT_ON_SUCCESS) or die("<p>$sql<p>" .oci_error($stmt)." : <p>error file : $_SERVER[PHP_SELF]");
    } else {
        @oci_execute($oci_stmt, OCI_COMMIT_ON_SUCCESS);
 }
    return $oci_stmt;
}

// 페이징 쿼리
function sql_oci_paging($sql, $startRow, $rows, $error=TRUE)

 global $oci_conn;
 $endRow = $startRow + $rows;
 $paging_query = "
        SELECT *
         FROM ( SELECT TT.*,
                       rownum+rnum-1 as TOTAL_CNT  
         FROM ( SELECT TT.*,
                       rownum rnum      
                  FROM (            
      $sql
    ) TT               
    ORDER BY rnum DESC ) TT               
     ORDER BY rnum )                
    WHERE rnum BETWEEN  $startRow AND $endRow
  
  ";
  
 $oci_stmt = oci_parse($oci_conn, $paging_query);

    if ($error) {
        @oci_execute($oci_stmt, OCI_COMMIT_ON_SUCCESS) or die("<p>$paging_query<p>" .oci_error($stmt)." : <p>error file : $_SERVER[PHP_SELF]");
    } else {
        @oci_execute($oci_stmt, OCI_COMMIT_ON_SUCCESS);
 }
    return $oci_stmt;
}

// 쿼리를 실행한 후 결과값에서 한행을 얻는다.
function sql_oci_fetch($sql, $error=TRUE)
{
    $oci_stmt = sql_oci_query($sql, $error);
    //$row = @sql_fetch_array($result) or die("<p>$sql<p>" . mysql_errno() . " : " .  mysql_error() . "<p>error file : $_SERVER[PHP_SELF]");
    $row = sql_oci_fetch_array($oci_stmt);
    return $row;
}


// 결과값에서 한행 연관배열(이름으로)로 얻는다.
function sql_oci_fetch_array($result)
{

 $row = @oci_fetch_assoc($result);
 set_lowercase($row);
    return $row;
}


function set_lowercase(&$row) {
 if(is_array($row)) {
  foreach ($row as $key => $value) {
   $lowerkey = strtolower($key);
   $row[$lowerkey] = $value;
  }

 }

}


// $result에 대한 메모리(memory)에 있는 내용을 모두 제거한다.
// sql_free_result()는 결과로부터 얻은 질의 값이 커서 많은 메모리를 사용할 염려가 있을 때 사용된다.
// 단, 결과 값은 스크립트(script) 실행부가 종료되면서 메모리에서 자동적으로 지워진다.
function sql_oci_free_result()
{
  global $oci_db, $oci_stmt;
  if($oci_stmt) oci_free_statement($oci_stmt);
  if($oci_conn) {
   oci_commit($oci_conn);
   oci_close($oci_conn);
  }

}
?>

첨부파일

common.oralib.php (2.9 KB) 165회 2010-04-08 01:23
|

댓글 4개

좋은 자료 고맙습니다.
정말 감사합니다. 유용하게 잘 쓰겠습니다.
나중에 보니 소스에 오류가 좀 있네요. 고쳐서 올려야 하는데. -_-
와우... 엄청난 자료를 공개해주셔서 감사합니다.
기회되면 적용해봐야겠네요...
댓글을 작성하시려면 로그인이 필요합니다. 로그인

그누4 팁자료실

그누보드4와 관련된 팁을 여러분들과 함께 공유하세요. 나누면 즐거움이 커집니다.

+
제목 글쓴이 날짜 조회
15년 전 조회 5,411
15년 전 조회 5,780
15년 전 조회 1.3만
15년 전 조회 4,866
15년 전 조회 4,027
15년 전 조회 1.3만
15년 전 조회 3,641
15년 전 조회 9,823
15년 전 조회 4,164
15년 전 조회 8,028
15년 전 조회 7,090
15년 전 조회 3,407
15년 전 조회 5,491
15년 전 조회 8,003
15년 전 조회 5,056
15년 전 조회 2,882
15년 전 조회 4,188
15년 전 조회 1.7만
15년 전 조회 4,509
15년 전 조회 4,057
🐛 버그신고