带数据缓存的ACCESS数据库操作类
主要提供的功能:
1,基本的常用的就不说了
2,数据列表输出,除了奇偶行交替变换颜色之类的列表,其他都可以完成,支持使用函数对字段的值进行格式化输出。而且这个功能的效率应该还是能保证的,虽然像是一个模板解析函数了。首先,一行的HTML代码量并不多,而解析,也仅仅是运行了一个preg_replace和str_replace就完成了,而且解析一次,在列表输出时,就不需要再次解析了,所以,此功能也仅仅就是比手动编写的多了那两个函数而已,几乎可以忽略不计。
3,分页查询,可通过类提供的一个方法,简单完成分页的查询。生成的SQL语句是我在网上找的,据说时不用存储过程最高效率的了,而ACCESS也不支持存储过程
4,显示分页,提供了两种样式,一种适合分页比较少的短样式,一种是分页比较多的长洋式,显示效果与动易CMS的分页相同,其实就是模仿动易的。
5,显示分页需要的相关数据,在分页查询函数中已经完成,所以,即使不使用类提供的分页样式,也可以方便的自己订制
6,数据缓存,只需要配置好,缓存路径,缓存生命周期,如果是分页查询的话,在设置一下最多缓存多少分页,就不需要再作任何的干预,和不使用数据缓存的使用方法,接口完全相同。使用效果我没有测试,不过应该还是可以保证的,数据缓存是数组形式的。
代码:
以下为引用的内容:
<?php
class access
{
/**
* 声明存储查询结果ID的数组,数据库连接ID,存储分页信息的数组,缓存数据读取偏移量
*/
public $resultId, $linkId, $pageMsg, $offset;
/**
* 声明显示错误消息的页面地址
*/
public $errPage = '';
/**
* 声明数据库路径,此路径需为绝对路径
*/
public $dbPath = '';
/**
* 缓存存储路径
*/
public $cachePath = '';
/**
* 缓存声明周期,设为0则不适用缓存
*/
public $cacheLifeTime = 3600;
/**
* 当使用分页查询时,最多缓存多少页
*/
public $cacheLimitMax = 100;
/**
* 建立数据库连接
*
* 说明:
* 此数据库类无构造函数,在声明新类之后,需手动运行此函数
*/
public function connect()
{
$dsn = 'DRIVER={Microsoft Access Driver (*.mdb)}; DBQ='.$this->dbPath;
$this->linkId = odbc_connect($dsn,'','',SQL_CUR_USE_ODBC);
$this->linkId || $this->setError('Connect database defeat!');
}
/**
* 执行一条SQL语句
*
* 参数:
* $sql 要执行的SQL语句
* $resultId 查询结果的ID,当执行一条不需返回的SQL语句,如删除,更新等时,该参数可省略
*/
public function query($sql ,$resultId = '__id__')
{
$this->resultId[$resultId] = odbc_exec($this->linkId,$sql);
$this->resultId[$resultId] || $this->setError('Carries out the SQL defeat!');
}
/**
* 从查询结果集中读取一条记录,并返回为数组
*
* 参数:
* $resultId 查询结果的ID
*/
public function record($resultId)
{
if (is_array($this->resultId[$resultId]))
{
$offset = $this->offset[$resultId]; $this->offset[$resultId]++;
return $this->resultId[$resultId][$offset];
}
return odbc_fetch_array($this->resultId[$resultId]);
}
/**
* 从查询结果集中读取一条记录,并注册为类的属性,属性名为字段名
*
* 参数:
* $resultId 查询结果ID
*/
public function recordObj($resultId)
{
if (is_array($this->resultId[$resultId]))
{
$rowArray = $this->resultId[$resultId][$this->offset[$resultId]];
$this->offset[$resultId]++;
} else {
$rowArray = $this->record($resultId);
}
for (reset($rowArray);$key = key($rowArray);next($rowArray)) $this->$key = $rowArray[$key];
}
/**
* 获取一个查询结果集的记录数
*
* 参数:
* $resultId 查询结果ID
*/
public function rowsNum($resultId)
{
return odbc_num_rows($this->resultId[$resultId]);
}
/**
* 获取表中符合条件的记录总数
*
* 参数:
* $table 表明
* $primary 主键,提供一个主键时可提高性能
* $condition 查询条件,留空时将返回表中的记录总数
*/
public function rowsTotal($table, $primary = '*', $condition = '')
{
$sql = 'select ('.$primary.') from '.$table.($condition ? ' where '.$condition : '');
$rowsTotal = odbc_result(odbc_exec($this->linkId,$sql),1);
$rowsTotal >= 0 || $this->setError('Gains the record total defeat!');