`
tpsang
  • 浏览: 1573 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

php操作类

PHP 
阅读更多
<?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);
            //如果开启了缓存, 那么就写入
            if ($this->cache === TRUE){
                $this->writeCache($row);
            }
            $this->options = array();
        }
        return $row;
    }
    /**
     * 读取结果集中的所有记录到数组中
     *
     * @access public
     * @param  resource  $result  结果集
     * @return array
     */
    public function fetchAll($result = NULL){
        $rows = array();
        while ($row = $this->fetch($result)){
            $rows[] = $row;
        }
        return $rows;
    }
    /**
     * 读取结果集中的一行记录到数组中
     *
     * @access public
     * @param  resource  $result  结果集
     * @param  int       $type    返回类型, 1为数组, 2为对象
     * @return mixed              根据返回类型返回
     */
    public function fetch($result = NULL, $type = NULL){
        $result = is_null($result) ? $this->result: $result;
        $type = is_null($type) ? $this->returnType: $type;
        $func = $type === 1 ? 'mysql_fetch_assoc' : 'mysql_fetch_object';
        return $func($result);
    }
    /**
     * 执行SQL命令
     *
     * @access      public
     * @param       string    $sql    SQL命令
     * @param       resource  $link   数据库连接标识
     * @return      mixed             数据库结果集
     */
    public function query($sql = '', $link = NULL){
        $sql = empty($sql) ? $this->sql: $sql;
        $link = is_null($link) ? $this->link: $link;
        $this->result = mysql_query($sql, $link);
        if (is_resource($this->result)){
            return $this->result;
        }
        //如果执行SQL出现错误, 那么抛出异常
        exit('<strong>Mysql error:</strong>'.$this->getError());
    }
    /**
     * 执行SQL命令
     *
     * @access      public
     * @param       string    $sql    SQL命令
     * @param       resource  $link   数据库连接标识
     * @return      bool              是否执行成功
     */
    public function execute($sql = '', $link = NULL){
        $sql = empty($sql) ? $this->sql: $sql;
        $link = is_null($link) ? $this->link: $link;
        if (mysql_query($sql, $link)){
            return TRUE;
        }
        return FALSE;
    }
    /**
     * 插入记录
     *
     * @access public
     * @param  array  $data  插入的记录, 格式:array('字段名'=>'值', '字段名'=>'值');
     * @param  string $table 表名
     * @return bool          当前记录id
     */
    public function add($data, $table = NULL){
        $table = is_null($table) ? $this->table: $table;
        $sql = "INSERT INTO `{$table}`";
        $fields = $values = array();
        $field = $value = '';
        //遍历记录, 格式化字段名称与值
        foreach($data as $key => $val){
            $fields[] = "`{$table}`.`{$key}`";
            $values[] = is_numeric($val) ? $val : "'{$val}'";
        }
        $field = join(',', $fields);
        $value = join(',', $values);
        unset($fields, $values);
        $sql .= "({$field}) VALUES({$value})";
        $this->sql = $sql;
        $this->execute();
        return $this->insertId();
    }
    /**
     * 删除记录
     *
     * @access public
     * @param  string  $where  条件
     * @param  string  $table  表名
     * @return bool            影响行数
     */
    public function delete($where = NULL, $table = NULL){
        $table = is_null($table) ? $this->table: $table;
        $where = is_null($where) ? @$this->options['where']: $where;
        $sql = "DELETE FROM `{$table}` WHERE {$where}";
        $this->sql = $sql;
        $this->execute();
        return $this->affectedRows();
    }
    /**
     * 更新记录
     *
     * @access public
     * @param  array   $data   更新的数据 格式:array('字段名' => 值);
     * @param  string  $where  更新条件
     * @param  string  $table  表名
     * @return bool            影响多少条信息
     */
    public function update($data, $where = NULL, $table = NULL){
        $table = is_null($table) ? $this->table: $table;
        $where = is_null($where) ? @$this->options['where']: $where;
        $sql = "UPDATE `{$table}` SET ";
        $values = array();
        foreach($data as $key => $val){
            $val = is_numeric($val) ? $val : "'{$val}'";
            $values[] = "`{$table}`.`{$key}` = {$val}";
        }
        $value = join(',', $values);
        $this->sql = $sql.$value." WHERE {$where}";
        $this->execute();
        return $this->affectedRows();
    }
    /**
     * 读取缓存
     *
     * @access      public
     * @return      mixed   如果读取成功返回缓存内容, 否则返回NULL
     */
    protected function readCache(){
        $file = $this->getCacheFileName();
        if (file_exists($file)){
            //缓存过期
            if ((filemtime($file) + $this->cacheLimitTime) < time()){
                @unlink($file);
                return NULL;
            }
            if (1 === $this->returnType){
                $row = include $file;
            }
            else{
                $data = file_get_contents($file);
                $row = unserialize($data);
            }
            return $row;
        }
        return NULL;
    }
    /**
     * 写入缓存
     *
     * @access      public
     * @param       mixed   $data   缓存内容
     * @return      bool            是否写入成功
     */
    public function writeCache($data){
        $file = $this->getCacheFileName();
        if ($this->makeDir(dirname($file))){
            if (1 === $this->returnType){
				$data = '<?php return '.var_export($data, TRUE).';?>';
			}else{
				$data = serialize($data);
			}
		}
        return file_put_contents($file, $data);
    }
	/*
	 * 清除缓存文件
	 * string $fileName 指定文件名(含函数)或者all(全部)
	 * 返回:清除成功返回true,反之返回false
	 */
	function clearCache( $fileName = "all" ) {
		if( $fileName != "all" ) {
			if( file_exists( $fileName ) ) {
				return @unlink( $fileName );
			}else return false;
		}
		if ( is_dir( $this->cachePath ) ) {
			if ( $dir = @opendir( $this->cachePath ) ) {
				while ( $file = @readdir( $dir ) ) {
					$check = is_dir( $file );
					if ( !$check )
					@unlink( $this->cachePath . $file );
				}
				@closedir( $dir );
				return true;
			}else{
				return false;
			}
		}else{
		  return false;
		}
	}
	  /*
	   * 连续建目录
	   * string $dir 目录字符串
	   * int $mode   权限数字
	   * 返回:顺利创建或者全部已建返回true,其它方式返回false
	   */
	function makeDir( $dir, $mode = "0777" ) {
		if( ! $dir ) return 0;
		$dir = str_replace( "\\", "/", $dir );
		
		$mdir = "";
		foreach( explode( "/", $dir ) as $val ) {
			$mdir .= $val."/";
			if( $val == ".." || $val == "." || trim( $val ) == "" ) continue;
		  
			if( ! file_exists( $mdir ) ) {
				if(!@mkdir( $mdir, $mode )){
					return false;
				}
			}
		}
		return true;
	}
	//自动加载函数, 实现特殊操作
    public function __call($func, $args)
    {
         if(in_array($func, array('field', 'join', 'where', 'order', 'group', 'limit', 'having')))
         {
               $this->options[$func] = array_shift($args);
               return $this;
         } elseif($func === 'table'){
               $this->options['table'] = array_shift($args);
               $this->table            = $this->options['table'];
               return $this;
         }
        //如果函数不存在, 则抛出异常
         exit('Call to undefined method Db::' . $func . '()');
     }
//-------------------------------------------------------------------------------
        //返回上一次操作所影响的行数
    public function affectedRows($link = null){
		$link = is_null($link) ? $this->link : $link;
		return mysql_affected_rows($link);
    }

        //返回上一次操作记录的id
    public function insertId($link = null){
        $link = is_null($link) ? $this->link : $link;
        return mysql_insert_id($link);
    }

        //清空结果集
    public function free($result = null){
         $result = is_null($result) ? $this->result : $result;
         return mysql_free_result($result);
    }

        //返回错误信息
	public function getError($link = NULL){
        $link = is_null($link) ? $this->link : $link;
        return mysql_error($link);
    }

        //返回错误编号
	public function getErrno($link = NULL){
        $link = is_null($link) ? $this->link : $link;
        return mysql_errno($link);
    }
}
?>
分享到:
评论

相关推荐

    Access数据库php操作类

    本主题聚焦于“Access数据库php操作类”,这是一个专为处理Microsoft Access数据库设计的PHP类,允许开发者通过面向对象的方式执行常见的数据库操作,如连接、查询、插入、更新和删除数据。 首先,我们要理解Access...

    封装的php操作类(php+mysql)

    本文将深入探讨如何通过封装的PHP操作类来实现对MySQL数据库的添加、删除和修改功能,以及在图书管理系统的应用。 首先,"封装"是面向对象编程的一个核心概念,它指的是将数据和操作这些数据的方法捆绑在一起,形成...

    MySQL数据库PHP操作类.zip

    MySQL数据库PHP操作类是一个用于简化数据库交互的工具,它允许开发者通过PHP代码高效地执行SQL语句,包括连接、查询、删除和更新等操作。在PHP中,处理MySQL数据库通常涉及使用MySQLi或PDO_MySQL扩展,但自定义操作...

    MySQL数据库PHP操作类

    MySQL数据库PHP操作类是一个核心工具,它允许开发者通过PHP脚本与MySQL数据库进行交互,执行各种数据库管理任务。此类的设计目标是提供一个简洁且灵活的方法,以处理SQL语句,而不是局限于预定义的功能。下面我们将...

    php微信操作类

    php微信操作类php微信操作类php微信操作类php微信操作类php微信操作类

    PHP实现的MongoDB数据库操作类.zip

    介绍了PHP实现的MongoDB数据库操作类分享,模板mysql版的操作类,支持传入多个mongo_server(1.一个出问题时连接其它的server 2.自动将查询均匀分发到不同server),创建索引:如索引已存在,则返回。

    php word 操作类

    "php word 操作类"提供了一种解决方案,它允许开发者通过PHP代码与Word文档进行交互。这种类文件通常包含了用于解析、创建和修改Word文档的各种方法,使得在服务器端无需依赖Microsoft Office软件即可实现相关功能。...

    PHP MYSQL操作类

    **PHP MySQL操作类详解** 在PHP开发中,与MySQL数据库进行交互是常见的需求。为了方便高效地处理数据库操作,开发者通常会封装一个MySQL操作类,如`PHP_DataSet`。这个类可以提供一系列的方法,包括连接数据库、...

    PHP Oracle 数据库操作类

    本文将深入探讨“PHP Oracle 数据库操作类”,这是一个专为PHP设计的类,用于连接和操作Oracle数据库。 PHP是一种广泛使用的开源脚本语言,常用于Web开发,而Oracle则是一款强大的关系型数据库管理系统(RDBMS),...

    强大的通用php数据库操作类

    【标题】:“强大的通用php数据库操作类” 在PHP开发中,数据库操作是核心部分,而一个强大且通用的PHP数据库操作类能极大地提升开发效率,降低出错概率。这类类库通常封装了基本的SQL查询功能,如增删改查(CRUD)...

    PHP数据库操作类

    PHP数据库操作类,MYSQL操作类!很强大

    php文件操作类.zip

    "php文件操作类.zip"可能包含一个自定义的PHP类库,专为处理文件系统操作而设计。这个类库可以帮助开发者更方便、高效地进行读取、写入、创建、删除和移动文件等任务,而无需直接调用PHP的内置文件函数。下面,我们...

    PHP基于pdo的数据库操作类【可支持mysql、sqlserver及oracle】.docx

    标题中的“PHP基于pdo的数据库操作类【可支持mysql、sqlserver及oracle】”指的是一个PHP编程中的数据库操作类,该类使用PDO(PHP Data Objects)扩展,允许开发者与MySQL、SQL Server和Oracle等多种数据库系统进行...

    PHP 简单文件操作类

    PHP 写的一个简单文件操作类,支持 PHP4 PHP5

    php用户操作类(方便实用)

    以下是对"php用户操作类(方便实用)"这个主题的详细说明。 1. **类的设计** - 类设计时应考虑面向对象的原则,如单一职责原则(Single Responsibility Principle),确保类只处理一种业务逻辑。例如,用户类(User)...

    一个php文件目录操作类

    本文将详细讨论“一个PHP文件目录操作类”的概念、功能和应用,以及如何使用它来实现测试建立文件夹、复制文件夹、移动文件夹和删除文件夹等常见任务。 PHP提供了丰富的内置函数来处理文件和目录,如`mkdir()`用于...

    实用的php文件操作类.zip

    "实用的PHP文件操作类"就是这样一个工具,它旨在简化常见的文件处理任务。下面我们将深入探讨PHP文件操作类的关键概念和功能。 1. **类库介绍** 这个类库很可能包含了若干个PHP类,每个类都专注于一个特定的文件或...

    php中mysql数据库操作类.zip

    在这个“php中mysql数据库操作类.zip”压缩包中,很可能包含了一个基于MySQLi或PDO实现的自定义数据库操作类。 一个基础的PHP MySQL数据库操作类通常包括以下组件: 1. **连接函数**:用于建立与MySQL服务器的连接...

Global site tag (gtag.js) - Google Analytics