access 和 mssql com方式链接工具

<?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;
	}
}
?>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值