출처 : http://web3.kr/40034737395
주석이 없다.. 나만 쓸려고 만들어 놓은거라서...
관련되서 공부하고자 하는 분들이 있으면 참고하시라...

#DBConn.Class.php
<?
    
/***************************************************************
    프로그램명    : DBConn Class
    작성자        : 윤영식 (2006-02-17 오후 5:07)
    설명            : DataBase Connection Class (Oracle, MySQL)
    ***************************************************************/

    
Class DBConn 
{

        const 
MYSQL 1
;
        const 
ORACLE 2
;

        private 
$connection
;

        private 
$dbType
;
        private 
$dbHost
;
        private 
$dbPort
;
        private 
$dbSID
;
        private 
$dbName
;
        private 
$dbUser
;
        private 
$dbPassword
;
        private 
$dbCharset
;


        function 
__construct($URI
) {
    
            
$this->parseURI($URI
);

            try {
                
$this    ->Connection
();

            } catch (
Exception $e
) {
                echo 
$e->getMessage
();

                
$this->__destruct
();
            }
        }

        function 
__destruct
() {

            if (
$this->dbType==MYSQL
) {
                @
mysql_close($this->connection
);
            } else if (
$this->dbType==ORACLE
) {
                @
oci_close($this->connection
);
            }
        }

        private function 
parseURI($URI
) {

            
$URI str_replace("#","_sp_",$URI
);
            
//$mysql_uri = "mysql://localhost:3306/?dbname=meris&username=meris&password=meris&charset=euckr";
            //$oracle_uri = "oracle://localhost:1521/?sid=ora10g&username=meris&password=meris&charset=";

            
$exp parse_url ($URI
);

            if (
strtolower($exp[scheme])=="mysql"
) {
                
$this->dbType=MYSQL
;
            } else if (
strtolower($exp[scheme])=="oracle"
) {
                
$this->dbType=ORACLE
;
            }

            
$this->dbHost $exp[host
];
            
$this->dbPort $exp[port
];

            
parse_str($exp[query
]);

            
$this->dbSID str_replace("_sp_","#",$dbsid
);
            
$this->dbName str_replace("_sp_","#",$dbname
);
            
$this->dbUser str_replace("_sp_","#",$username
);
            
$this->dbPassword str_replace("_sp_","#",$password
);
            
$this->dbCharset str_replace("_sp_","#",$charset
);
        }

        function 
freeStatement($stmt
) {
            if (
$this->dbType==MYSQL
) {
                @
mysql_free_result($stmt
);
            } else if (
$this->dbType==ORACLE
) {
                @
oci_free_statement($stmt
);
            }
        }

        private function 
Connection
() {
            if (
$this->dbType==MYSQL
) {
                if (!
$this->connection=@mysql_connect($this->dbHost,$this->dbUser,$this->dbPassword
)) {
                    throw new 
Exception(mysql_error
());
                }
                
                if(!
mysql_select_db($this->dbName,$this->connection
)){
                    throw new 
exception(mysql_error
());
                }  
                
                if (
$this->dbCharset
) {
                    @
mysql_query("set session character_set_connection=".$this->dbCharset.";"
);
                    @
mysql_query("set session character_set_results=".$this->dbCharset.";"
);
                    @
mysql_query("set session character_set_client=".$this->dbCharset.";"
);

                }

            } else if (
$this->dbType==ORACLE
) {
                if (!
$this->connection = @oci_connect($this->dbUser,$this->dbPassword,$this->dbSID,$this->dbCharset
)) {
                    
$error oci_error
();
                    throw new 
Exception($error[message
]);
                }

            } else {
                throw new 
Exception("No such DB Type".$this->dbType
);
            }
        }

        function 
getConnection
() {
            return 
$this->connection
;
        }

        function 
destroyConnection
() {
            if (
$this->dbType==MYSQL
) {
                @
mysql_close($this->connection
);
            } else if (
$this->dbType==ORACLE
) {
                @
oci_close($this->connection
);
            }
        }

        function 
execute($sql,$flag=OCI_COMMIT_ON_SUCCESS
) {
            if (
$this->dbType==MYSQL
) {
                if (!
$stmt = @mysql_query($sql,$this->connection
)) {
                    echo 
mysql_error
();
                    return 
false
;
                } else {
                    return 
$stmt
;
                }
            } else if (
$this->dbType==ORACLE
) {
                if (!
$stmt = @oci_parse($this->connection,$sql
)) {
                    
$error oci_error($this->connection
);
                    echo 
$error[message
];
                    return 
false
;
                }

                if (!@
oci_execute($stmt,$flag
)) {
                    
$error oci_error($stmt
);
                    echo 
$error[message
];
                    return 
false
;
                } else {
                    return 
$stmt
;
                }
            }
        }

        function 
fetchObject(&$obj,$stmt
) {
            if (
$this->dbType==MYSQL
) {
                if (
$obj=@mysql_fetch_object($stmt
)) {
                    return 
true
;
                }
            } else if (
$this->dbType==ORACLE
) {

                if (
$row = @oci_fetch_assoc($stmt
)) {
                    
$rows 
= Array();
                    while(list(
$key,$val)=each($row
)) {
                        
$rows[strtolower($key)] = $val
;
                    }
                    
$obj = (object)$rows
;
                    return 
true
;
                }
            }
            return 
false
;
        }

        function 
fetchAssoc(&$obj,$stmt
) {
            if (
$this->dbType==MYSQL
) {
                if (
$obj = @mysql_fetch_assoc($stmt
)) {
                    return 
true
;
                }
            } else if (
$this->dbType==ORACLE
) {
                if (
$row = @oci_fetch_assoc($stmt
)) {
                    
$obj 
= Array();
                    while(list(
$key,$val)=each($row
)) {
                        
$obj[strtolower($key)] = $val
;
                    }
                    return 
true
;
                }
            }

            return 
false
;
        }

        function 
fetchRow(&$obj,$stmt
) {
            if (
$this->dbType==MYSQL
) {
                if (
$obj = @mysql_fetch_row($stmt
)) {
                    return 
true
;
                }
            } else if (
$this->dbType==ORACLE
) {
                if (
$obj = @oci_fetch_row($stmt
)) {
                    return 
true
;
                }
            }

            return 
false
;
        }

        function 
fetchArray(&$obj,$stmt
) {
            if (
$this->dbType==MYSQL
) {
                if (
$obj = @mysql_fetch_array($stmt
)) {
                    return 
true
;
                }
            } else if (
$this->dbType==ORACLE
) {

                if (
$row = @oci_fetch_array($stmt
)) {
                    
$obj 
= Array();
                    while(list(
$key,$val)=each($row
)) {
                        
$obj[strtolower($key)] = $val
;
                    }
                    return 
true
;
                }
            }

            return 
false
;
        }

        function 
commit
() {
            if (
$this->dbType==ORACLE
) {
                return 
oci_commit($this->connection
);
            } else {
                return 
true
;
            }
        }

        function 
rollback
() {
            if (
$this->dbType==ORACLE
) {
                return 
oci_rollback($this->connection
);
            } else {
                return 
true
;
            }
        }

        function 
getAffectedRows($obj=""
) {
            if (
$this->dbType==MYSQL
) {
                if (
$obj==""
) {
                    return 
mysql_affected_rows
();
                } else {
                    return 
mysql_affected_rows($obj
);
                }
            }

            return 
false
;
        }
        
        function 
getNumRows($stmt
) {
            if (
$this->dbType==MYSQL
) {
                return 
mysql_num_rows($stmt
);
            }
            return 
false
;
        }

        
## 계속 추가 예정
    
}
?>


사용방법
Oracle DB 사용시 #oracle.php
<?php
    
/***************************************************************
    프로그램명    : Oracle 예제
    작성자        : 윤영식 (2006-10-18 오후 5:44)
    ***************************************************************/
    
$uri "oracle://localhost:1521/?sid=ora10g&username=meris&password=meris&charset="
;

    
// Class 호출
    
$conn = new DBConn($uri
);

    
$sql "SELECT name FROM ttable"
;

    
// 쿼리 실행
    
$stmt $conn->execute($sql
);

    
// $obj 오브젝트로 Fetch
    
$conn->fetchObject(&$obj,$stmt
);

    
// $obj->컬럼명 하면 데이터 나옴
    
$name $obj->name
;

    
$obj=null
;

    
// Statment Free
    
$conn->freeStatement($stmt
);
?>


MySQL DB 사용시 #mysql.php
<?php
    
/***************************************************************
    프로그램명    : MySQL 예제
    작성자        : 윤영식 (2006-10-18 오후 5:47)
    ***************************************************************/
    
$uri "mysql://localhost:3306/?dbname=meris&username=meris&password=meris&charset=euckr"
;

    
// Class 호출
    
$conn = new DBConn($uri
);

    
$sql "SELECT name FROM ttable"
;

    
// 쿼리 실행
    
$stmt $conn->execute($sql
);

    
// $obj 오브젝트로 Fetch
    
$conn->fetchObject(&$obj,$stmt
);

    
// $obj->컬럼명 하면 데이터 나옴
    
$name $obj->name
;

    
$obj=null
;

    
// Statment Free
    
$conn->freeStatement($stmt
);
?>


눈치 빠른 분들은 벌써 눈치 쳈겠지만...
$uri 값만 바까줌으로써.. MySQL 이든 Oracle 이든 모두 사용가능 하다.
Sybase 및 기타 다른 DB도 해보고 싶지만 설치 되어 있는 환경이 없어서 테스트 불가.

'php > Tip&Tech' 카테고리의 다른 글

php 함수목록  (0) 2013.06.02
php db connection class 범용  (0) 2011.09.27
.php 확장자를 .html로 쓰기위해  (1) 2011.08.12
php 접속하면 파일 다운로드 바로 가기  (0) 2011.08.01
PHP 페이징 기법  (0) 2011.07.27

+ Recent posts