주석이 없다.. 나만 쓸려고 만들어 놓은거라서...
관련되서 공부하고자 하는 분들이 있으면 참고하시라...
#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도 해보고 싶지만 설치 되어 있는 환경이 없어서 테스트 불가