DB Layer로 사용할 때
여러가지의 데이터베이스를 동일한 방법으로 접근하는 방법으로 인클루드하는 파일만 바꿔주면 데이터베이스에 관계없이 접근합니다.
[code php;gutter:false]
require("./minidb/class.mysql.php");
$db = new MiniDB("localhost", "userid", "password", "dbname");
if (list($rows,$fields)=$db->query("select * from Members")) {
while ($record=$db->next_record()) {
......
}
} [/code]
$db = new MiniDB("localhost", "userid", "password", "dbname");
if (list($rows,$fields)=$db->query("select * from Members")) {
while ($record=$db->next_record()) {
......
}
} [/code]
여러 개의 데이터베이스를 동시에 연결할 때
각 데이터베이스에 따라 별도로 정의된 클래스를 이용하여 객체를 생성합니다.
[code php;gutter:false]
require("./minidb/class.oracle.php");
require("./minidb/class.mysql.php");
$mys = new baseMysql("localhost", "userid", "password", "dbname");
$ora = new baseOracle("localhost", "userid", "password", "ORCL");
if (list($rows,$fields)=$ora->query("select * from Members")) {
while ($record = $ora->next_record()) {
......
}
}
if (list($rows,$fields)=$mys->query("select * from Members")) {
while ($record = $mys->next_record()) {
......
}
} [/code]
require("./minidb/class.mysql.php");
$mys = new baseMysql("localhost", "userid", "password", "dbname");
$ora = new baseOracle("localhost", "userid", "password", "ORCL");
if (list($rows,$fields)=$ora->query("select * from Members")) {
while ($record = $ora->next_record()) {
......
}
}
if (list($rows,$fields)=$mys->query("select * from Members")) {
while ($record = $mys->next_record()) {
......
}
} [/code]
복수의 디비명을 사용할 때
[code php;gutter:false]
require("./minidb/class.mysql.php");
$my1 = new MiniDB("localhost", "userid", "password", "dbname#1");
$my2 = new MiniDB("localhost", "userid", "password", "dbname#2"); [/code]
$my1 = new MiniDB("localhost", "userid", "password", "dbname#1");
$my2 = new MiniDB("localhost", "userid", "password", "dbname#2"); [/code]
동일한 데이터베이스를 가지고 여러 개의 객체를 생성할 때
문서가 여러개의 파일로 분리되어 있는 경우, 예를 들어 메인 스크립트에서 클래스로 작성된 문서를 불러들일 경우에 클래스 내에서 메인 스크립트와 관계없이 클래스 내에서 미니디비 클래스를 객체화 하여 사용할 수 있습니다. 이러한 경우에는 동일한 데이터베이스를 가지고 복수의 객체를 생성하게 될 것입니다. 제가 공개한 것 중에 미니디비를 이용하는 것이 많이 있는데 이러한 것이 현재는 거의 상속받아 처리하는 것으로 되어 있으나 아직 공개되지 않고 실험 중인 것은 대부분 클래스 내에서 별도로 객체화하여 사용하고 있습니다. 이럴 때 사용하는 방법으로 애플리케이셔너 0.0.2(미공개)의 경우를 예를 들어 보이겠습니다.
[code php;gutter:false]
<?php /***메인 스크립트***/
require("./class.mysql.php"); // 미니디비(MySQL용) 0.2.2
require("./class.applbase.php"); // 애플리케이셔너(디비용) 0.2.0
$db = new MiniDB("디비 호스트명", "사용자명", "디비 패스워드", "디비명");
.
.
.
?>
<?php /***애플리케이셔너(디비용)***/
/*
filename : class.applbase.php (ver 0.0.2)
email : hwooky@phpclass.com
homepage : www.phpclass.com
author : hwooky
environment : PHP3 & 4, 미니디비 ver 0.2.2
*/
class Applicationer {
var $prvWaitingTime = 5; // Waiting Time(초단위)
var $prvResource = "Applicationer";
var $prvList = array();
var $baseClass = "MiniDB";
var $baseObj;
function Applicationer($resource="") {
if (!is_object($this->baseObj)) {
$base = $this->baseClass;
$this->baseObj = new $base;
}
if ($resource) $this->prvResource = $resource;
}
function prvLocking($varname) {
$query = sprintf("UPDATE %s SET islock=1,lastused=%s WHERE id='%s'",
$this->prvResource,
time(),
$varname
);
$this->baseObj->query($query);
}
.
.
.
?> [/code]
require("./class.mysql.php"); // 미니디비(MySQL용) 0.2.2
require("./class.applbase.php"); // 애플리케이셔너(디비용) 0.2.0
$db = new MiniDB("디비 호스트명", "사용자명", "디비 패스워드", "디비명");
.
.
.
?>
<?php /***애플리케이셔너(디비용)***/
/*
filename : class.applbase.php (ver 0.0.2)
email : hwooky@phpclass.com
homepage : www.phpclass.com
author : hwooky
environment : PHP3 & 4, 미니디비 ver 0.2.2
*/
class Applicationer {
var $prvWaitingTime = 5; // Waiting Time(초단위)
var $prvResource = "Applicationer";
var $prvList = array();
var $baseClass = "MiniDB";
var $baseObj;
function Applicationer($resource="") {
if (!is_object($this->baseObj)) {
$base = $this->baseClass;
$this->baseObj = new $base;
}
if ($resource) $this->prvResource = $resource;
}
function prvLocking($varname) {
$query = sprintf("UPDATE %s SET islock=1,lastused=%s WHERE id='%s'",
$this->prvResource,
time(),
$varname
);
$this->baseObj->query($query);
}
.
.
.
?> [/code]
애플리케이셔너에서 $this->baseObj = new $base;을 보면 알겠지만 여기서는 메인 스크립트와 달리 아무런 인자도 없이 객체를 생성합니다. 이와 같이 두번째 객체를 생성할 때는 데이터베이스에 대한 정보가 필요없습니다.
단 하나의 레코드 중 하나의 필드 정보만을 얻고자 할 때
예를 들어, 쿼리된 레코드수를 구하는 예를 살펴보면 아래와 같습니다. 단, 이 방법은 PHP4에서만 적용됩니다.
[code php;gutter:false]
if ($db->query("SELECT count(*) FROM $table")) {
list(,$count) = each($db->next_record());
} [/code]
list(,$count) = each($db->next_record());
} [/code]
위의 예제를 PHP3에서 사용하려면 아래와 같이 수정합니다.
[code php;gutter:false]
if ($db->query("SELECT count(*) FROM $table")) {
$rec = $db->next_record();
list(,$count) = each($rec);
} [/code]
$rec = $db->next_record();
list(,$count) = each($rec);
} [/code]
데이터베이스에 접속하는 방법을 선택할 때
영구 접속할 때(초기 상태)
[code php;gutter:false]
$db = new MiniDB("디비 호스트명", "사용자명", "디비 패스워드", "디비명", "pconnect");
[/code]
임시 접속할 때
[code php;gutter:false]
$db = new MiniDB("디비 호스트명", "사용자명", "디비 패스워드", "디비명", "connect");
[/code]
게시판에서 제공하는 미니디비 압축 파일에 대한 참고사항
1. 소스코드에서 작성된 탭사이즈는 4컬럼입니다.
2. 첨부된 압축파일을 풀면 미니디비를 실험할 수 있는 예제가 세가지 있습니다.
1) DB Layer로 사용하기 위한 예제(dblayer.php3)
2) 복수의 디비명을 사용하기 위한 예제(mc.php3)
3) 다중 데이터베이스를 활용하기 위한 예제(mysql2oracle.php3)
2) 복수의 디비명을 사용하기 위한 예제(mc.php3)
3) 다중 데이터베이스를 활용하기 위한 예제(mysql2oracle.php3)
"다중 데이터베이스를 활용하기 위한 예제"는 MySQL 데이터베이스에 있는 테이블의 모든 데이터를 오라클 데이터베이스에 있는 테이블로 이동시키는 예제입니다.
3. 예제를 실행할 때 필요한 테이블명과 디비명, 호스트명, 사용자명 및 비밀번호는 inc.db_info.php3에서 디비서버에 맞게 수정하세요.
'phpsource > 데이터베이스' 카테고리의 다른 글
{미니디비}5.업그레이드 및 패치 (0) | 2000.11.21 |
---|---|
{미니디비}3.사용자 인터페이스 (0) | 2000.11.21 |
{미니디비}2.MiniDB 작성 (0) | 2000.11.21 |
{미니디비}1.DB Layer의 필요성 (0) | 2000.11.21 |