<?php
/**
* Filename:MicroDB.class.php
* ScriptName: MicroDB
* Author:anvycn@163.com
* Version:0.1
* //获得数据库实例
* $db = MicroDB::Access('access数据库的物理地址');
* $db = MicroDB::Mssql($dbhost,$dbuser,$dbpass,$dbname);
* //获得数据库表结构Array
* $db->show_tables();
* //执行sql语句Void
* $db->query("insert into tb (id,name) values (null,'foobar')");
* //获取单个元素String
* $name = $db->get_var("select name from tb where id=1");
* $total = $db->get_var("select count(id) as n from tb");
* //获取一行Array
* $row = $db->get_row("select * from tb where id=1");
* //获取列表Array $pagesize = 12, $page=1, 后两项参数可选,为空则返回所有数据
* $rows = $db->get_results("select * from tb where cate=2",12,1);
*
*/
class MicroDB{
private $conn;
private $rs;
private $cstr;
static function Access($dbpath){
$db_stuff = new self();
$db_stuff->cstr = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=".$dbpath;
$db_stuff->initDB();
return $db_stuff;
}
static function Mssql($dbhost,$dbuser,$dbpass,$dbname){
$db_stuff = new self();
$db_stuff->cstr = "PROVIDER=SQLOLEDB;DATA SOURCE={$dbhost};UID={$dbuser};PWD={$dbpass};DATABASE={$dbname}";
/**
"PROVIDER=SQLOLEDB;DATA SOURCE=(local);UID=用户名;PWD=密码;DATABASE=数据库"
"DRIVER={SQL Server};SERVER=(local);UID=用户名;PWD=密码;DATABASE=数据库"
*/
$db_stuff->initDB();
return $db_stuff;
}
private function initDB(){
$this->conn = new com("ADODB.Connection");
$this->rs = new com("ADODB.RecordSet");
$this->conn->Open($this->cstr);
}
public function flushDB(){
$this->conn->Close();
}
public function show_tables(){
$rs = $this->conn->openSchema(20);
$tables = array();
$rs->movefirst;
while(!$rs->eof){
if($rs['TABLE_TYPE']->value == 'TABLE')
$tables[] = $rs["TABLE_NAME"]->value;
$rs->movenext;
}
return $tables;
}
public function query($sql){
return $this->conn->execute($sql);
}
public function get_row($sql){
$_row = $this->query($sql);
if($_row->eof || $_row->bof)
return null;
foreach(@$_row->fields as $std){
$row[$std->name] = @$std->value;
}
return $row;
}
public function get_var($sql){
$_row = $this->query($sql);
if($_row->eof || $_row->bof)
return null;
return $_row->fields(0)->value;
}
public function get_results($sql,$page_size = 0,$page = 0){
$this->rs->Open($sql,$this->conn,1,1);
if($this->rs->eof || $this->rs->bof){
@$this->rs->Close();
return null;
}
if($page_size > 0 && $page > 0){
$this->rs->pagesize = $page_size;
if($page < 1)
$page = 1;
if($page > $this->rs->pagecount)
$page = $this->rs->pagecount;
$this->rs->move(($page-1) * $page_size);
for($i=1;$i<=$this->rs->pagesize;$i++){
$row = array();
foreach($this->rs->fields as $std){
$row[$std->name] = $std->value;
}
$rows[] = $row;
$this->rs->movenext();
if($this->rs->eof||$this->rs->bof)
break;
}
}else{
while(1){
$row = array();
foreach($this->rs->fields as $std){
$row[$std->name] = $std->value;
}
$rows[] = $row;
$this->rs->movenext();
if($this->rs->eof||$this->rs->bof)
break;
}
}
$this->rs->close();
return $rows;
}
}
?>