주석이 없다.. 나만 쓸려고 만들어 놓은거라서...
관련되서 공부하고자 하는 분들이 있으면 참고하시라...
#DBConn.Class.php
사용방법
Oracle DB 사용시 #oracle.php
MySQL DB 사용시 #mysql.php
눈치 빠른 분들은 벌써 눈치 쳈겠지만...
$uri 값만 바까줌으로써.. MySQL 이든 Oracle 이든 모두 사용가능 하다.
Sybase 및 기타 다른 DB도 해보고 싶지만 설치 되어 있는 환경이 없어서 테스트 불가
관련되서 공부하고자 하는 분들이 있으면 참고하시라...
#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도 해보고 싶지만 설치 되어 있는 환경이 없어서 테스트 불가