오라클 클래스
컨텐츠 정보
- 22,296 조회
- 5 추천
- 목록
본문
class ora9 {
var $ORA_USER; //오라클 사용자
var $ORA_PASSWD; //오라클 암호
var $ORA_DNS; //오라클 DNS
var $db; //db접속
var $autocommit = true; //자동커밋
var $debug=false; //디버그모드
function ora9($user='기본아이디', $passwd='기본암호', $dns='기본DNS') { //오라클 접속정보 초기화
$this->ORA_USER=$user;
$this->ORA_PASSWD=$passwd;
$this->ORA_DNS=$dns;
}
function con() { //오라클 접속
$this->db= OCILogon($this->ORA_USER,$this->ORA_PASSWD,$this->ORA_DNS) or die("DB Connect Error");
}
function discon() { //오라클 접속 해제
return @OCILogoff($this->db);
}
function error($mes) { //에러메세지 출력
$this->discon();
echo "<script language=JavaScript>
alert(\\"$mes\\");
</script>";
exit;
}
function autocommit($autocommit = false) {
$this->autocommit=$autocommit;
}
function set_str($str) { //값이 문자열경우 '' 붙여줌
$chk="sysdate|nextval|curval|null"; //무시할 문자열
if(!preg_match("/$chk/i", $str)) {
$var=intval($str);
$ok=("$str"=="$var");
if(!$ok ){
$str="'".$str."'";
}
}
return $str;
}
//######################################################퀴리 날리기
function query($query) { //일반 퀴리
if($this->debug) echo $query;
$stmt = @OCIParse($this->db, $query);
if (!$stmt) { //에러가 났을경우
$erra=OCIError($stmt);
$this->error("SQL Error: $erra[code] $erra[message]");
}
$err=@OCIExecute($stmt);
if (!$err) { //에러가 났을경우
$erra=OCIError($err);
$this->error("SQL Error: $erra[code] $erra[message]");
}
if(@OCIFetchinto($stmt, &$value, OCI_ASSOC)) {
@OCIFreeStatement($stmt);
return $value; //배열형태로 전송
} else {
@OCIFreeStatement($stmt);
return false;
}
}
function querys($query) { //여러개의 결과용 퀴리
if($this->debug) echo $query;
$stmt = @OCIParse($this->db, $query);
if (!$stmt) { //에러가 났을경우
$erra=OCIError($stmt);
$this->error("SQL Error: $erra[code] $erra[message]");
}
$err=OCIExecute($stmt);
if (!$err) { //에러가 났을경우
$erra=OCIError($err);
$this->error("SQL Error: $erra[code] $erra[message]");
}
while (OciFetchinto($stmt,&$row,OCI_ASSOC)) {
$value[]=$row;
}
@OCIFreeStatement($stmt);
return $value; //배열형태로 전송
}
function queryone($query) { //한개의 값만 출력
if($this->debug) echo $query;
$stmt = @OCIParse($this->db, $query);
if (!$stmt) { //에러가 났을경우
$erra=OCIError($stmt);
$this->error("SQL Error: $erra[code] $erra[message]");
}
$err=@OCIExecute($stmt);
if (!$err) { //에러가 났을경우
$erra=OCIError($err);
$this->error("SQL Error: $erra[code] $erra[message]");
}
if(@OciFetchinto($stmt,&$value,OCI_NUM )) {
@OCIFreeStatement($stmt);
return $value[0];
} else {
@OCIFreeStatement($stmt);
return false;
}
}
//################################################################ insert 용 퀴리
function squery($query) { //insert & update & delete 용 퀴리
if($this->debug) echo $query;
$stmt = @OCIParse($this->db, $query);
if (!$stmt) { //에러가 났을경우
$erra=OCIError($stmt);
$this->error("SQL Error: $erra[code] $erra[message]");
}
if($this->autocommit) {
$err=@OCIExecute($stmt);
} else {
$err=@OCIExecute($stmt, OCI_DEFAULT);
}
if (!$err) { //에러가 났을경우
$erra=OCIError($err);
$this->error("SQL Error: $erra[code] $erra[message]");
}
$count=@OCIRowCount($stmt);
@OCIFreeStatement($stmt);
return $count;
}
function squery_inarr($dbname, $query_arr) { //배열형태로 인설트
$arr_total=count($query_arr); //전체 배열수
foreach($query_arr as $key=>$val) {
$set.=$key;
$input.=$this->set_str($val);
$arr_total--;
if($arr_total > 0) {
$set.=", ";
$input.=", ";
}
}
$sql="insert into $dbname($set) values($input)"; //sql문 생성
if($this->debug) echo $sql;
$stmt = @OCIParse($this->db, $sql);
if (!$stmt) { //에러가 났을경우
$erra=OCIError($stmt);
$this->error("SQL Error: $erra[code] $erra[message]");
}
if($this->autocommit) {
$err=@OCIExecute($stmt);
} else {
$err=@OCIExecute($stmt, OCI_DEFAULT);
}
if (!$err) { //에러가 났을경우
$erra=OCIError($err);
$this->error("SQL Error: $erra[code] $erra[message]");
}
@OCIFreeStatement($stmt);
}
function squery_uparr($dbname, $query_arr, $where) { //배열형태로 업데이트
$arr_total=count($query_arr); //전체 배열수
foreach($query_arr as $key=>$val) {
$query .= $key ."=".$this->set_str($val);
$arr_total--;
if($arr_total > 0) {
$query.=", ";
}
}
$sql="update $dbname set $query $where"; //sql문 생성
if($this->debug) echo $sql;
$stmt = @OCIParse($this->db, $sql);
if (!$stmt) { //에러가 났을경우
$erra=OCIError($stmt);
$this->error("SQL Error: $erra[code] $erra[message]");
}
if($this->autocommit) {
$err=@OCIExecute($stmt);
} else {
$err=@OCIExecute($stmt, OCI_DEFAULT);
}
if (!$err) { //에러가 났을경우
$erra=OCIError($err);
$this->error("SQL Error: $erra[code] $erra[message]");
}
$count=@OCIRowCount($stmt);
@OCIFreeStatement($stmt);
return $count;
}
function squery_inclob($dbname, $query_arr, $lobname, $lobdata) { //clob형식 입력 퀴리(배열형)
$arr_total=count($query_arr); //전체 배열수
foreach($query_arr as $key=>$val) {
$set.=$key;
$input.=$this->set_str($val);
$arr_total--;
if($arr_total > 0) {
$set.=", ";
$input.=", ";
}
}
$sql="insert into $dbname($set, $lobname) values($input, empty_clob()) returning $lobname into :CONTB"; //sql문 생성
if($this->debug) echo $sql;
$clob = OCINewDescriptor($this->db, OCI_D_LOB);
$stmt = @OCIParse($this->db, $sql);
if (!$stmt) { //에러가 났을경우
$erra=OCIError($stmt);
$this->error("SQL Error: $erra[code] $erra[message]");
}
OCIBindByName ($stmt, ":CONTB", &$clob, -1, OCI_B_CLOB);
$err=@OCIExecute($stmt, OCI_DEFAULT);
$clob->save($lobdata);
$this->commit();
if (!$err) { //에러가 났을경우
$erra=OCIError($err);
$this->error("SQL Error: $erra[code] $erra[message]");
}
@OCIFreeDesc($clob);
@OCIFreeStatement($stmt);
}
//CLOB 형식 업데이트용
function squery_upclob($dbname, $query_arr, $lobname, $lobdata, $where) {
$arr_total=count($query_arr); //전체 배열수
foreach($query_arr as $key=>$val) {
$query .= $key ."=".$this->set_str($val);
$arr_total--;
if($arr_total > 0) {
$query.=", ";
}
}
$sql="update $dbname set $query, $lobname=empty_clob() $where returning $lobname into :CONTB "; //sql문 생성
if($this->debug) echo $sql;
// $stmt = @OCIParse($this->db, $sql);
$clob = OCINewDescriptor($this->db, OCI_D_LOB);
$stmt = @OCIParse($this->db, $sql);
if (!$stmt) { //에러가 났을경우
$erra=OCIError($stmt);
$this->error("SQL Error: $erra[code] $erra[message]");
}
OCIBindByName ($stmt, ":CONTB", &$clob, -1, OCI_B_CLOB);
$err=OCIExecute($stmt, OCI_DEFAULT);
if (!$err) { //에러가 났을경우
$erra=OCIError($err);
$this->error("SQL Error: $erra[code] $erra[message]");
}
$count=@OCIRowCount($stmt);
$clob->save($lobdata);
$this->commit();
@OCIFreeDesc($clob);
@OCIFreeStatement($stmt);
return $count;
}
//############################################# 오토커밋이 True일경우만 가능
function commit() { //커밋
return @OCICommit($this->db);
}
function rollback() { //롤백
return @OCIRollback($this->db);
}
}
/////////////////////////////////예제
$db=new ora9(); //초기화 만약 다른 db접속시 ora9('아이디','암호','dns');
$db->con(); //접속
$sql="select count(id) from familyinfo where id='aaa' ";
$num=$db->queryone($sql); //하나의 값만 받아온다 없으면 false
$sql = "INSERT INTO TokenLog(TOKEN_NO ,ID, Type, Token_Date, Content, Pay_Amount) values(TokenLog_seq.nextval, 'ggg', 4, SYSDATE, 'ggg', 100) ";
$num=$db->squery($sql); //업데이트&인설트용&delete 퀴리 return 업데이트, 인설트 갯수
$sql="select SubClass_Code, Title, PotoFile, Cont, Reg_Id, OpenFlag, Pick_OpenFlag, Reg_NickName, HTML from gggg where No='10' and id='ggg' ";
$val=$db->query($sql); //일반 퀴리 $val[TITLE] 형식으로 배열로 값이 날라온다. 키값은 대문자임 없으면 false
$sql="select SubClass_Code, SubClass_Name from MiniHP_SubClass where Id='gggg' ";
$val=$this->db->querys($sql); //여러개 결과용 일반퀴리 $val[0][SUBCLASS_NAME] 식의 배열로 날라온다 없으면 false
$sql_data = Array (
NO => $b_no,
SubClass_Code => $cate,
ID => $this->user_id,
Title => $org[TITLE],
PotoFile => $filename,
Cont => $org[CONT],
Reg_Id => $this->user_id,
Reg_Nickname => $this->user_nick,
OpenFlag => $open,
filesize => $org[FILESIZE],
Pick_Memo => $memo,
PICK_ID => $this->dbid,
Pick_OpenFlag => 0
); //배열형태로 키값=필드명으로 해서 만든다
$db->squery_inarr('board', $sql_data); //db명과 배열을 넣어서 인설트한다.
//위에꺼와 같이 배열로 만들어서 사용. 업데이트용입니다. db명, 배열, 조건
$num=$db->squery_uparr('baord', $sql_data, " where no=10"); //업데이트 갯수 리턴
$sql_data = Array (
NO => "mynote_seq.nextval",
SUBCLASS_CODE => $cate,
ID => $this->dbid,
Title => $title,
Reg_Id => $this->user_id,
Reg_NickName => $this->user_nick,
OPEN_FLAG => $open,
PICKFLAG => $popen,
Pick_Memo => '',
HTML_Flag => $html,
);
//CLOB형식 데이타를 인설트하기 위한 퀴리 db명, 배열, CLOB필드명, CLOB데이타
$db->squery_inclob('gggg', $sql_data, 'CONT', $cont);
$sql_data = Array (
SUBCLASS_CODE => $cate,
Title => $title,
Reg_NickName => $this->user_nick,
Open_Flag => $open,
PICKFLAG => $popen,
HTML_Flag => $html
);
//clob형 업데이트 함수 db명, 배열, clob필드명, clob데이타, 조건 return 업데이트 갯수
$num=$db->squery_upclob('gggg', $sql_data, 'CONT', $cont, " where no=$no");
$db->discon(); //접속해제
///기타
$db->autocommit(true); //commit() 과 rollback() 을 사용할 수 있게한다. 기본 false
$db->debug=true; //디버그모드;; sql문이 출력된다.
한달정도 사용했는데 별로 문제점은 없었습니다^^; 문제점 있으시면 알려주세요.
거친마루 문제점은 아니고.. DNS 라는 프로퍼티 변수는 sid 가 아닌가 해서요.. 혹여나 용어 충돌때문에 핵갈려하시는분들 계실까봐 글 남깁니다
var $ORA_USER; //오라클 사용자
var $ORA_PASSWD; //오라클 암호
var $ORA_DNS; //오라클 DNS
var $db; //db접속
var $autocommit = true; //자동커밋
var $debug=false; //디버그모드
function ora9($user='기본아이디', $passwd='기본암호', $dns='기본DNS') { //오라클 접속정보 초기화
$this->ORA_USER=$user;
$this->ORA_PASSWD=$passwd;
$this->ORA_DNS=$dns;
}
function con() { //오라클 접속
$this->db= OCILogon($this->ORA_USER,$this->ORA_PASSWD,$this->ORA_DNS) or die("DB Connect Error");
}
function discon() { //오라클 접속 해제
return @OCILogoff($this->db);
}
function error($mes) { //에러메세지 출력
$this->discon();
echo "<script language=JavaScript>
alert(\\"$mes\\");
</script>";
exit;
}
function autocommit($autocommit = false) {
$this->autocommit=$autocommit;
}
function set_str($str) { //값이 문자열경우 '' 붙여줌
$chk="sysdate|nextval|curval|null"; //무시할 문자열
if(!preg_match("/$chk/i", $str)) {
$var=intval($str);
$ok=("$str"=="$var");
if(!$ok ){
$str="'".$str."'";
}
}
return $str;
}
//######################################################퀴리 날리기
function query($query) { //일반 퀴리
if($this->debug) echo $query;
$stmt = @OCIParse($this->db, $query);
if (!$stmt) { //에러가 났을경우
$erra=OCIError($stmt);
$this->error("SQL Error: $erra[code] $erra[message]");
}
$err=@OCIExecute($stmt);
if (!$err) { //에러가 났을경우
$erra=OCIError($err);
$this->error("SQL Error: $erra[code] $erra[message]");
}
if(@OCIFetchinto($stmt, &$value, OCI_ASSOC)) {
@OCIFreeStatement($stmt);
return $value; //배열형태로 전송
} else {
@OCIFreeStatement($stmt);
return false;
}
}
function querys($query) { //여러개의 결과용 퀴리
if($this->debug) echo $query;
$stmt = @OCIParse($this->db, $query);
if (!$stmt) { //에러가 났을경우
$erra=OCIError($stmt);
$this->error("SQL Error: $erra[code] $erra[message]");
}
$err=OCIExecute($stmt);
if (!$err) { //에러가 났을경우
$erra=OCIError($err);
$this->error("SQL Error: $erra[code] $erra[message]");
}
while (OciFetchinto($stmt,&$row,OCI_ASSOC)) {
$value[]=$row;
}
@OCIFreeStatement($stmt);
return $value; //배열형태로 전송
}
function queryone($query) { //한개의 값만 출력
if($this->debug) echo $query;
$stmt = @OCIParse($this->db, $query);
if (!$stmt) { //에러가 났을경우
$erra=OCIError($stmt);
$this->error("SQL Error: $erra[code] $erra[message]");
}
$err=@OCIExecute($stmt);
if (!$err) { //에러가 났을경우
$erra=OCIError($err);
$this->error("SQL Error: $erra[code] $erra[message]");
}
if(@OciFetchinto($stmt,&$value,OCI_NUM )) {
@OCIFreeStatement($stmt);
return $value[0];
} else {
@OCIFreeStatement($stmt);
return false;
}
}
//################################################################ insert 용 퀴리
function squery($query) { //insert & update & delete 용 퀴리
if($this->debug) echo $query;
$stmt = @OCIParse($this->db, $query);
if (!$stmt) { //에러가 났을경우
$erra=OCIError($stmt);
$this->error("SQL Error: $erra[code] $erra[message]");
}
if($this->autocommit) {
$err=@OCIExecute($stmt);
} else {
$err=@OCIExecute($stmt, OCI_DEFAULT);
}
if (!$err) { //에러가 났을경우
$erra=OCIError($err);
$this->error("SQL Error: $erra[code] $erra[message]");
}
$count=@OCIRowCount($stmt);
@OCIFreeStatement($stmt);
return $count;
}
function squery_inarr($dbname, $query_arr) { //배열형태로 인설트
$arr_total=count($query_arr); //전체 배열수
foreach($query_arr as $key=>$val) {
$set.=$key;
$input.=$this->set_str($val);
$arr_total--;
if($arr_total > 0) {
$set.=", ";
$input.=", ";
}
}
$sql="insert into $dbname($set) values($input)"; //sql문 생성
if($this->debug) echo $sql;
$stmt = @OCIParse($this->db, $sql);
if (!$stmt) { //에러가 났을경우
$erra=OCIError($stmt);
$this->error("SQL Error: $erra[code] $erra[message]");
}
if($this->autocommit) {
$err=@OCIExecute($stmt);
} else {
$err=@OCIExecute($stmt, OCI_DEFAULT);
}
if (!$err) { //에러가 났을경우
$erra=OCIError($err);
$this->error("SQL Error: $erra[code] $erra[message]");
}
@OCIFreeStatement($stmt);
}
function squery_uparr($dbname, $query_arr, $where) { //배열형태로 업데이트
$arr_total=count($query_arr); //전체 배열수
foreach($query_arr as $key=>$val) {
$query .= $key ."=".$this->set_str($val);
$arr_total--;
if($arr_total > 0) {
$query.=", ";
}
}
$sql="update $dbname set $query $where"; //sql문 생성
if($this->debug) echo $sql;
$stmt = @OCIParse($this->db, $sql);
if (!$stmt) { //에러가 났을경우
$erra=OCIError($stmt);
$this->error("SQL Error: $erra[code] $erra[message]");
}
if($this->autocommit) {
$err=@OCIExecute($stmt);
} else {
$err=@OCIExecute($stmt, OCI_DEFAULT);
}
if (!$err) { //에러가 났을경우
$erra=OCIError($err);
$this->error("SQL Error: $erra[code] $erra[message]");
}
$count=@OCIRowCount($stmt);
@OCIFreeStatement($stmt);
return $count;
}
function squery_inclob($dbname, $query_arr, $lobname, $lobdata) { //clob형식 입력 퀴리(배열형)
$arr_total=count($query_arr); //전체 배열수
foreach($query_arr as $key=>$val) {
$set.=$key;
$input.=$this->set_str($val);
$arr_total--;
if($arr_total > 0) {
$set.=", ";
$input.=", ";
}
}
$sql="insert into $dbname($set, $lobname) values($input, empty_clob()) returning $lobname into :CONTB"; //sql문 생성
if($this->debug) echo $sql;
$clob = OCINewDescriptor($this->db, OCI_D_LOB);
$stmt = @OCIParse($this->db, $sql);
if (!$stmt) { //에러가 났을경우
$erra=OCIError($stmt);
$this->error("SQL Error: $erra[code] $erra[message]");
}
OCIBindByName ($stmt, ":CONTB", &$clob, -1, OCI_B_CLOB);
$err=@OCIExecute($stmt, OCI_DEFAULT);
$clob->save($lobdata);
$this->commit();
if (!$err) { //에러가 났을경우
$erra=OCIError($err);
$this->error("SQL Error: $erra[code] $erra[message]");
}
@OCIFreeDesc($clob);
@OCIFreeStatement($stmt);
}
//CLOB 형식 업데이트용
function squery_upclob($dbname, $query_arr, $lobname, $lobdata, $where) {
$arr_total=count($query_arr); //전체 배열수
foreach($query_arr as $key=>$val) {
$query .= $key ."=".$this->set_str($val);
$arr_total--;
if($arr_total > 0) {
$query.=", ";
}
}
$sql="update $dbname set $query, $lobname=empty_clob() $where returning $lobname into :CONTB "; //sql문 생성
if($this->debug) echo $sql;
// $stmt = @OCIParse($this->db, $sql);
$clob = OCINewDescriptor($this->db, OCI_D_LOB);
$stmt = @OCIParse($this->db, $sql);
if (!$stmt) { //에러가 났을경우
$erra=OCIError($stmt);
$this->error("SQL Error: $erra[code] $erra[message]");
}
OCIBindByName ($stmt, ":CONTB", &$clob, -1, OCI_B_CLOB);
$err=OCIExecute($stmt, OCI_DEFAULT);
if (!$err) { //에러가 났을경우
$erra=OCIError($err);
$this->error("SQL Error: $erra[code] $erra[message]");
}
$count=@OCIRowCount($stmt);
$clob->save($lobdata);
$this->commit();
@OCIFreeDesc($clob);
@OCIFreeStatement($stmt);
return $count;
}
//############################################# 오토커밋이 True일경우만 가능
function commit() { //커밋
return @OCICommit($this->db);
}
function rollback() { //롤백
return @OCIRollback($this->db);
}
}
/////////////////////////////////예제
$db=new ora9(); //초기화 만약 다른 db접속시 ora9('아이디','암호','dns');
$db->con(); //접속
$sql="select count(id) from familyinfo where id='aaa' ";
$num=$db->queryone($sql); //하나의 값만 받아온다 없으면 false
$sql = "INSERT INTO TokenLog(TOKEN_NO ,ID, Type, Token_Date, Content, Pay_Amount) values(TokenLog_seq.nextval, 'ggg', 4, SYSDATE, 'ggg', 100) ";
$num=$db->squery($sql); //업데이트&인설트용&delete 퀴리 return 업데이트, 인설트 갯수
$sql="select SubClass_Code, Title, PotoFile, Cont, Reg_Id, OpenFlag, Pick_OpenFlag, Reg_NickName, HTML from gggg where No='10' and id='ggg' ";
$val=$db->query($sql); //일반 퀴리 $val[TITLE] 형식으로 배열로 값이 날라온다. 키값은 대문자임 없으면 false
$sql="select SubClass_Code, SubClass_Name from MiniHP_SubClass where Id='gggg' ";
$val=$this->db->querys($sql); //여러개 결과용 일반퀴리 $val[0][SUBCLASS_NAME] 식의 배열로 날라온다 없으면 false
$sql_data = Array (
NO => $b_no,
SubClass_Code => $cate,
ID => $this->user_id,
Title => $org[TITLE],
PotoFile => $filename,
Cont => $org[CONT],
Reg_Id => $this->user_id,
Reg_Nickname => $this->user_nick,
OpenFlag => $open,
filesize => $org[FILESIZE],
Pick_Memo => $memo,
PICK_ID => $this->dbid,
Pick_OpenFlag => 0
); //배열형태로 키값=필드명으로 해서 만든다
$db->squery_inarr('board', $sql_data); //db명과 배열을 넣어서 인설트한다.
//위에꺼와 같이 배열로 만들어서 사용. 업데이트용입니다. db명, 배열, 조건
$num=$db->squery_uparr('baord', $sql_data, " where no=10"); //업데이트 갯수 리턴
$sql_data = Array (
NO => "mynote_seq.nextval",
SUBCLASS_CODE => $cate,
ID => $this->dbid,
Title => $title,
Reg_Id => $this->user_id,
Reg_NickName => $this->user_nick,
OPEN_FLAG => $open,
PICKFLAG => $popen,
Pick_Memo => '',
HTML_Flag => $html,
);
//CLOB형식 데이타를 인설트하기 위한 퀴리 db명, 배열, CLOB필드명, CLOB데이타
$db->squery_inclob('gggg', $sql_data, 'CONT', $cont);
$sql_data = Array (
SUBCLASS_CODE => $cate,
Title => $title,
Reg_NickName => $this->user_nick,
Open_Flag => $open,
PICKFLAG => $popen,
HTML_Flag => $html
);
//clob형 업데이트 함수 db명, 배열, clob필드명, clob데이타, 조건 return 업데이트 갯수
$num=$db->squery_upclob('gggg', $sql_data, 'CONT', $cont, " where no=$no");
$db->discon(); //접속해제
///기타
$db->autocommit(true); //commit() 과 rollback() 을 사용할 수 있게한다. 기본 false
$db->debug=true; //디버그모드;; sql문이 출력된다.
한달정도 사용했는데 별로 문제점은 없었습니다^^; 문제점 있으시면 알려주세요.
거친마루 문제점은 아니고.. DNS 라는 프로퍼티 변수는 sid 가 아닌가 해서요.. 혹여나 용어 충돌때문에 핵갈려하시는분들 계실까봐 글 남깁니다
관련자료
-
링크
댓글 0
등록된 댓글이 없습니다.