• 技术文章 >后端开发 >php教程

    PHP数据操作种

    2016-06-13 10:50:11原创440

    PHP数据操作类
    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('Mysql error:'.$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 = '';			}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( "\\", "//m.sbmmt.com/m/", $dir );				$mdir = "";		foreach( explode( "//m.sbmmt.com/m/", $dir ) as $val ) {			$mdir .= $val."//m.sbmmt.com/m/";			if( $val == ".." || $val == "." || trim( $val ) == "" ) continue;		  			if( ! file_exists( $mdir ) ) {				if([email protected]( $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);    }}?>

    ?调用方法:

    connect($config);  //传入配置, 连接数据库, $link为连接标识$rows = $db->table('test')->field('*')->order('id DESC')->limit(0, 10)->findAll();//上面的操作, 相当于执行SQL命令: SELECT * FROM test ORDER BY id DESC LIMIT 0, 10;print_r($db->getCacheFileName());//$db->clearCache($db->getCacheFileName());//$db->clearCache();// 执行的效果和上面相同, 但是多了一个cache方法,也就缓存了这次查询 cache()有三个参数, cache(缓存名称, 有效时间, 缓存路径); 缓存名称默认是使用md5(SQL命令)为名称, 有效时间默认为1分钟, 缓存路径可以在连接数据库时进行配置//下面来插入一条记录$data = array(       'name'  => 'xiaokai',       'pass'  => '123456',);$db->add($data);// 这样就插入了一条记录 注意这里$data的格式为 array('字段名称1' => '值1', '字段名称2' => '值2', .....);//相当于执行SQL命令: INSERT INTO test(`name`, `pass`) VALUES('xiaokai', '123456');//朋友们可能奇怪了, add 函数并没有传入表名称啊, 为什么会执行这样的SQL命令呢?//其实在上面查询的时候就已经使用$db->table('test')方法了, 这里已经传入了表名称, 所以在操作就不需要指定表名称了.//有插入就有删除, 下面来删除$db->delete('id = 10');//这样就删除了test表中 id为10的记录//相当于执行SQL命令: DELETE FROM test WHERE id = 10;//这里也是一样没有传入表名称//下面构造数组, 然后更新一条记录$data = array(       'name'  => '123456',       'pass'  => 'xiaokai',);$db->update($data, 'id = 10');//这样就将id为10的记录给更新了//相当于执行SQL命令: UPDATE test set name = '123456', pass = 'xiaokai' WHERE id = 10; 

    ?

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:this gt return table link
    上一篇:php 不从新编译 添加 ftp 模块 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • php实现通过JSON RPC与go通讯(附代码)• 浅析怎么使用PHP做异步爬取数据• PHP8.3要有新函数了!(json_validate函数说明)• 设计API接口时,要注意这些地方!• PHP网站常见一些安全漏洞及防御方法
    1/1

    PHP中文网