日期:2014-05-17 浏览次数:20759 次
<?php
/**
+----------------------
* Mysql操作类
+----------------------
* 文件名称 Db.class.php
+----------------------
* 文件描述 mysql操作类
+----------------------
*/
class Db{
//数据库连接标识
protected $link = null;
//当前操作的表
public $table = '';
//查询参数
protected $options = array();
//当前执行的SQL语句
protected $sql = '';
//用什么编码传递数据
protected $dbCharset = 'utf8';
//缓存路径
protected $cachePath = './cache/';
//缓存扩展名
protected $cacheFileExt = "php";
//缓存文件名
protected $cacheFileName;
//是否缓存
protected $cache = false;
//缓存更新时间秒数
protected $cacheLimitTime = 60;
//数据返回类型, 1代表数组, 2代表对象
protected $returnType = 1;
/*
* 根据当前动态文件生成缓存文件名
*/
function setCacheFileName($fileName) {
$cacheFileName = $this->cachePath . strtoupper(md5($fileName)).".".$this->cacheFileExt;
$this->cacheFileName=$cacheFileName;
}
/*
* 根据当前动态文件生成缓存文件名
*/
function getCacheFileName() {
return $this->cacheFileName;
}
/**
* 连接数据库
*
* @access public
* @param array $db 数据库配置
* @return resource 数据库连接标识
*/
public function connect($db){
//根据配置使用不同函数连接数据库
$db['host'] = isset($db['port']) ? $db['host'].':'.$db['port']: $db['host'];
$db['char'] = isset($db['char']) ? $db['char']: $this->dbCharset;
$func = $db['pconnect'] ? 'mysql_pconnect' : 'mysql_connect';
$this->link = $func($db['host'], $db['user'], $db['pwd']);
mysql_select_db($db['database'], $this->link);
mysql_query("SET NAMES '{$db['char']}'");
$this->cachePath = isset($db['cachepath']) ? $db['cachepath']: $this->cachePath;
return $this->link;
}
/**
* 查询符合条件的一条记录
*
* @access public
* @param string $where 查询条件
* @param string $field 查询字段
* @param string $table 表
* @return mixed 符合条件的记录
*/
public function find($where = NULL, $field = '*', $table = ''){
return $this->findAll($where = NULL, $field = '*', $table = '', FALSE);
}
/**
* 查询符合条件的所有记录
*
* @access public
* @param string $where 查询条件
* @param string $field 查询字段
* @param string $table 表
* @return mixed 符合条件的记录
*/
public function findAll($where = NULL, $field = '*', $table = '', $all = TRUE){
$this->options['where'] = is_null($where) ? @$this->options['where']: $where;
$this->options['field'] = isset($this->options['field']) ? $this->options['field']: $field;
$this->options['table'] = $table == '' ? $this->table: $table;
$sql = "SELECT {$this->options['field']} FROM `{$this->options['table']}` ";
$sql .= isset($this->options['join']) ? ' LEFT JOIN '.$this->options['join']: '';
$sql .= isset($this->options['where']) ? ' WHERE '.$this->options['where']: '';
$sql .= isset($this->options['group']) ? ' GROUP BY '.$this->options['group']: '';
$sql .= isset($this->options['having']) ? ' HAVING '.$this->options['having']: '';
$sql .= isset($this->options['order']) ? ' ORDER BY '.$this->options['order']: '';
$sql .= isset($this->options['limit']) ? ' LIMIT '.$this->options['limit']: '';
$this->sql = $sql;
$row = NULL;
//如果开启了缓存, 那么重缓存中获取数据
if ($this->cache === TRUE){
$this->setCacheFileName($this->sql);
$row = $this->readCache();
}
//如果读取失败, 或则没有开启缓存
if (is_null($row)){
$result = $this->query();
$row = $all === TRUE ? $this->fetchAll($result): $this->fetch($result);
//如果开启了缓存, 那