设为首页 收藏本站
查看: 1113|回复: 0

[经验分享] mysql工具类

[复制链接]

尚未签到

发表于 2016-9-12 10:28:53 | 显示全部楼层 |阅读模式
<?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 = emptyempty($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 = emptyempty($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'</

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-271158-1-1.html 上篇帖子: mysql explain介绍 下篇帖子: mysql自增序列
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表