欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

MySQL数据库操作类PHP实现,支持连贯操作 mysql数据库下载64位 sql数据库实例下载 sql数据库补丁下载

程序员文章站 2022-03-19 18:08:18
...
使用过ThinkPHP框架的同学可能会对于其中数据库模型操作特别有好感,ThinkPHP提供了数据库操作的简单的操作,对于连接数据库,数据库的增删改查等数据操作都非常的nice,同时支持连贯操作,对于那些不习惯写sql语句的同学真是大大的便利。(注:sql还是很重要的,不要因为用了框架就把原先的忘了)。
而在笔者使用php操作redis实现后台任务的过程中,也想要借助这种便利,但无奈redis操作单独的类,直接访问其中的controller文件的话,总是会提示M方法失败,导致此模型方法不能使用。万般无奈之下,只能自己来实现一下了。
借助PHP的mysqli相关函数,进行MySQL数据库操作类的实现。此程序中提供数据库的操作包括:数据库的连接,数据库的选择,数据库用户的选择,相应数据库中所有数据表名的查看;数据表的操作包括:相应的数据表中字段全部属性的查看,数据表的增删改查操作,数据表查询、插入的连贯操作等

/**
 * Author: helen
 * CreateTime: 2016/4/12 20:14
 * description: 数据库操作类(仅对接MySQL数据库,主要利用MySQLi函数)
 */classDatabase{//MySQL主机地址private$_host;
    //MySQL用户名private$_user;
    //MySQL用户密码private$_password;
    //指定数据库名称private$_database;
    //MySQL数据库端口号private$_port;
    private$_socket;
    //当前数据库对象private$_dbObj;
    //数据库表private$_table;
    //数据库表对象private$_tableObj;
    // 最近错误信息protected$error            =   '';
    // 数据信息protected$data             =   array();
    // 查询表达式参数protected$options          =   array();
    protected$_validate        =   array();  // 自动验证定义protected$_auto            =   array();  // 自动完成定义protected$_map             =   array();  // 字段映射定义protected$_scope           =   array();  // 命名范围定义// 链操作方法列表protected$methods          =   array('strict','order','alias','having','group','lock','distinct','auto','filter','validate','result','token','index','force');

    /**
     * Database类初始化函数
     * 取得DB类的实例对象 字段检查
     * @access public
     * @param string $host MySQL数据库主机名
     * @param string $user MySQL数据库用户名
     * @param string $password MySQL数据库密码
     * @param string $database 指定操作的数据库
     * @return mixed  数据库连接信息、错误信息
     */publicfunction__construct($host,$user,$passowrd,$database,$port=3306){$this->_initialize();
        if(!isset($host)||!isset($user)||!isset($passowrd)||!isset($database)){
            returnfalse;
        }else{
            $this->_host     = $host;
            $this->_user     = $user;
            $this->_password = $passowrd;
            $this->_database = $database;
            $this->_port     = $port;
            $_dbObj = new mysqli($host,$user,$passowrd,$database,$port);
            if($_dbObj->connect_errno){
                $this->error = $_dbObj->connect_error;
                returnfalse;
            }else{
                $this->_dbObj = $_dbObj;
                return$this;
            }
        }
    }
    /**
     * 错误信息函数
     * 返回数据库操作过程中最后一次执行时的错误信息
     * @access public
     * @return mixed  数据库连接错误信息(正常返回'')
     */publicfunctionerror(){return$this->error;
    }
    // 回调方法 初始化模型protectedfunction_initialize() {}
    /**
     * 设置数据对象的值
     * @access public
     * @param string $name 名称
     * @param mixed $value 值
     * @return void
     */publicfunction__set($name,$value) {// 设置数据对象属性$this->data[$name] = $value;
    }

    /**
     * 获取数据对象的值
     * @access public
     * @param string $name 名称
     * @return mixed
     */publicfunction__get($name) {returnisset($this->data[$name])?$this->data[$name]:null;
    }

    /**
     * 检测数据对象的值
     * @access public
     * @param string $name 名称
     * @return boolean
     */publicfunction__isset($name) {returnisset($this->data[$name]);
    }

    /**
     * 销毁数据对象的值
     * @access public
     * @param string $name 名称
     * @return void
     */publicfunction__unset($name) {unset($this->data[$name]);
    }
    /**
     * 利用__call方法实现一些特殊的方法(对于调用类中不存在方法的解决方案)
     * @access public
     * @param string $method 方法名称
     * @param array $args 调用参数
     * @return mixed
     */publicfunction__call($method,$args) {/*if(in_array(strtolower($method),$this->methods,true)) {
            // 连贯操作的实现
            $this->options[strtolower($method)] =   $args[0];
            return $this;
        }elseif(in_array(strtolower($method),array('count','sum','min','max','avg'),true)){
            // 统计查询的实现
            $field =  isset($args[0])?$args[0]:'*';
            return ;
        }elseif(strtolower(substr($method,0,5))=='getby') {
            // 根据某个字段获取记录
            $field   =   parse_name(substr($method,5));
            $where[$field] =  $args[0];
            return ;
        }elseif(strtolower(substr($method,0,10))=='getfieldby') {
            // 根据某个字段获取记录的某个值
            $name   =   parse_name(substr($method,10));
            $where[$name] =$args[0];
            return ;
        }elseif(isset($this->_scope[$method])){// 命名范围的单独调用支持
            return ;
        }else{

        }*/
    }
    /*
     * 选择数据库
     * @access public
     * @param string $database 选择的数据库名称
     * @return mixed 数据库连接信息
     * */publicfunctionselect_db($database){$select_db = mysqli_select_db($this->_dbObj,$database);
        if($select_db){
            $this->_database = $database;
            $_dbObj = new mysqli($this->_host,$this->_user,$this->_password,$database,$this->_port);
            $this->_dbObj = $_dbObj;
            return$this;
        }else{
            $this->error = mysqli_error($this->_dbObj);
            returnfalse;
        }
    }
    /*
     * 数据库用户更换
     * @access public
     * @param string $user 数据库用户名称
     * @param string $password 数据库用户密码
     * @return mixed 数据库连接信息
     * */publicfunctionchange_user($user,$password){$change_user = mysqli_change_user($this->_dbObj,$user,$password,$this->_database);
        if($change_user){
            $this->_user = $user;
            $this->_password = $password;
            $_dbObj = new mysqli($this->_host,$this->_user,$this->_password,$this->_database,$this->_port);
            $this->_dbObj = $_dbObj;
            return$this;
        }else{
            $this->error = mysqli_error($this->_dbObj);
            returnfalse;
        }
    }
    /*
     * 查询数据库中所有的表名
     * @access public
     * @return array 数据表的数量和表名
     * */publicfunctiontables(){$sql = 'show tables';
        $search_res = mysqli_query($this->_dbObj,$sql);
        if($search_res){
            $num_rows = $search_res->num_rows;
            $tables_msg = array(
                'count'=>$num_rows,
                'tables'=>array()
            );
            for($i=0;$i$num_rows;$i++){
                $row = $search_res->fetch_assoc();
                $key = 'Tables_in_'.$this->_database;
                array_push($tables_msg['tables'],$row[$key]);
            }
            mysqli_free_result($search_res);
            return$tables_msg;
        }else{
            mysqli_free_result($search_res);
            returnfalse;
        }
    }
    /*
     * 获取指定表中所有信息
     * @access public
     * @param string $table 数据表名称
     * @return array 数据表的详细信息
     * */publicfunctionselect_table($table){$sql = 'select * from '.$table;
        $search_res = mysqli_query($this->_dbObj,$sql);
        if($search_res){
            $this->_table = $table;
            $table_msg = self::query_handle($search_res);
            $this->_tableObj = $table_msg;
            mysqli_free_result($search_res);
            return$table_msg;
        }else{
            mysqli_free_result($search_res);
            returnfalse;
        }
    }
    /*
     * 获取指定表的字段详细信息
     * @access public
     * @param string $table 数据表名称
     * @return array 数据表的字段详细信息
     * */publicfunctionselect_table_fields($table){$sql = 'show fields from '.$table;
        $search_res = mysqli_query($this->_dbObj,$sql);
        if($search_res){
            $this->_table = $table;
            $fields_msg = self::query_handle($search_res);
            mysqli_free_result($search_res);
            return$fields_msg;
        }else{
            mysqli_free_result($search_res);
            returnfalse;
        }
    }
    /*
     * 获取数据表中指定字段信息(允许多字段同时查询)
     * @access public
     * @param mixed $field 指定字段(字符串传入使用,间隔)
     * @return array 数据表中指定字段信息
     * */publicfunctiongetField($field){$fields = self::param_handle($field);
        $count = count($fields);
        for($i=0;$i$count;$i++){
            $index = $fields[$i];
            $sql = 'select '.$index.' from '.$this->_table;
            $res = mysqli_query($this->_dbObj,$sql);
            $field_msg[$index] = self::query_handle($res);
        }
        return$field_msg;
    }
    /*
     * mysqli_query函数结果处理函数
     * @access protected
     * @param object $obj mysqli_query函数结果
     * @return array 数据表中指定字段信息
     * */protectedfunctionquery_handle($obj){$res = array();
        for($i=0;$i$obj
相关标签: Mysql数据库