单例模式实现数据库

这边主要是要实现一个新库的连接 , 然后用单例结合框架的Db类写了一个数据库连接

<?php

require_once (WEB_PATH . 'db/Db.cls.php');

/** 
 * @author jixiaolong
 * BI数据库
 * 只提供只读功能
 */
class BiDb {
	private static $Instance = null;
	private $DB = null;
	/**
	 * 
	 * @param  array $master_arr
 
	 * @param  array $slave_arr
	  
	 */
	private function __construct() {
		//BI数据库访问账号
		$bi_link = array ( 
				'db_host' => 'test', 
				'db_port' => 3306, 
				'db_user' => 'test', 
				'db_pass' => 'test', 
				'db_name' => 'test', 
				'new_link' => false 
		);
		$this->DB = new Db ( $bi_link );
	}
	
	/**
	 * 
	 */
	function __destruct() {
	
	}
	
	public static function getInstance() {
		if (empty ( self::$Instance )) {
			BiDb::$Instance = new BiDb ();
		}
		return BiDb::$DbInstance;
	}
	
	/**
	 * 单查
	 * @param string $sql SQL
	 */
	public function fetchOne($sql) {
		return $this->DB->fetchOne ( $sql );
	}
	
	/**
	 * 多查
	 * @param string $table 表名
	 * @param string $fields 字段
	 * @param string $where_cond 查询条件
	 * @param string $pri 索引字段
	 */
	public function fetchList($table, $fields = '*', $where_cond = 1, $pri = '') {
		$where_cond = $this->buildCond ( $where_cond );
		$sql = 'SELECT ' . $fields . ' FROM `' . $table . '`' . $where_cond . '';
		return $this->dFetchList ( $sql, $pri );
	}
	
	private function buildCond($where_cond) {
		$where_cond = trim ( $where_cond );
		if ($where_cond) {
			if (strlen ( $where_cond ) > 5) {
				$tmp = strtoupper ( substr ( $where_cond, 0, 6 ) );
				if (! in_array ( $tmp, array ( 
						'WHERE ', 
						'LIMIT ', 
						'GROUP ', 
						'ORDER ' 
				) )) {
					$where_cond = ' WHERE ' . $where_cond;
				}
			} else {
				$where_cond = ' WHERE ' . $where_cond;
			}
		}
		return $where_cond;
	}
	
	public function dFetchList($sql, $pri = "") {
		$data_lists = array ();
		$this->DB->query ( $sql );
		
		if ($pri) {
			$pri_arr = explode ( ',', $pri );
			$count = count ( $pri_arr );
			switch ($count) {
				case 1 :
					while ( $r = $this->DB->fetchArray () ) {
						$data_lists [$r [$pri]] = $r;
					}
					break;
				case 2 :
					while ( $r = $this->DB->fetchArray () ) {
						$data_lists [$r [$pri_arr [0]]] [$r [$pri_arr [1]]] = $r;
					}
					break;
				case 3 :
					while ( $r = $this->DB->fetchArray () ) {
						if ($r [$pri_arr [2]]) {
							$data_lists [$r [$pri_arr [0]]] [$r [$pri_arr [1]]] [$r [$pri_arr [2]]] = $r;
						} else {
							$data_lists [$r [$pri_arr [0]]] [$r [$pri_arr [1]]] [] = $r;
						}
					
					}
					break;
				case 4 :
					while ( $r = $this->DB->fetchArray () ) {
						$data_lists [$r [$pri_arr [0]]] [$r [$pri_arr [1]]] [$r [$pri_arr [2]]] [$r [$pri_arr [3]]] = $r;
					}
					break;
			}
		} else {
			while ( $r = $this->DB->fetchArray () ) {
				$data_lists [] = $r;
			}
		}
		return $data_lists;
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值