站内搜索

MySQL数据库操作类(PHP实现,支持连贯操作)_MySQL

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

_initialize();        if(!isset($host)||!isset($user)||!isset($passowrd)||!isset($database)){            return false;        }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;                return false;            }else{                $this->_dbObj = $_dbObj;                return $this;            }        }    }    /**     * 错误信息函数     * 返回数据库操作过程中最后一次执行时的错误信息     * @access public     * @return mixed  数据库连接错误信息(正常返回'')     */    public function error(){        return $this->error;    }    // 回调方法 初始化模型    protected function _initialize() {}    /**     * 设置数据对象的值     * @access public     * @param string $name 名称     * @param mixed $value 值     * @return void     */    public function __set($name,$value) {        // 设置数据对象属性        $this->data[$name] = $value;    }    /**     * 获取数据对象的值     * @access public     * @param string $name 名称     * @return mixed     */    public function __get($name) {        return isset($this->data[$name])?$this->data[$name]:null;    }    /**     * 检测数据对象的值     * @access public     * @param string $name 名称     * @return boolean     */    public function __isset($name) {        return isset($this->data[$name]);    }    /**     * 销毁数据对象的值     * @access public     * @param string $name 名称     * @return void     */    public function __unset($name) {        unset($this->data[$name]);    }    /**     * 利用__call方法实现一些特殊的方法(对于调用类中不存在方法的解决方案)     * @access public     * @param string $method 方法名称     * @param array $args 调用参数     * @return mixed     */    public function __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 数据库连接信息     * */    public function select_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);            return false;        }    }    /*     * 数据库用户更换     * @access public     * @param string $user 数据库用户名称     * @param string $password 数据库用户密码     * @return mixed 数据库连接信息     * */    public function change_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);            return false;        }    }    /*     * 查询数据库中所有的表名     * @access public     * @return array 数据表的数量和表名     * */    public function tables(){        $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);            return false;        }    }    /*     * 获取指定表中所有信息     * @access public     * @param string $table 数据表名称     * @return array 数据表的详细信息     * */    public function select_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);            return false;        }    }    /*     * 获取指定表的字段详细信息     * @access public     * @param string $table 数据表名称     * @return array 数据表的字段详细信息     * */    public function select_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);            return false;        }    }    /*     * 获取数据表中指定字段信息(允许多字段同时查询)     * @access public     * @param mixed $field 指定字段(字符串传入使用,间隔)     * @return array 数据表中指定字段信息     * */    public function getField($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 数据表中指定字段信息     * */    protected function query_handle($obj){        $res = array();        for($i=0;$i<$obj->num_rows;$i++){            $row = $obj->fetch_assoc();            array_push($res,$row);        }        return $res;    }    /*     * 传入参数处理函数     * @access protected     * @param mixed $param 传入参数     * @return array 处理后数组数据     * */    public function param_handle($param){        if(is_string($param)&&!empty($param)){            $params = explode(',',$param);        }elseif(is_array($param)&&!empty($param)){            $params = $param;        }else{            return false;        }        return $params;    }    /*     * 查询表达式参数处理函数     * @access protected     * @param mixed $param 传入参数(where limit order)     * @return string 处理后字符串数据     * */    public function options_handle($param){        if(is_numeric($param)){            $option = $param;        }elseif(is_string($param)&&!empty($param)&&!is_numeric($param)){            $params = explode(',',$param);            $count = count($params);            $option = implode(' and ',$params);        }elseif(is_array($param)&&!empty($param)){            $params = $param;            $count = count($params);            $arr = array();            foreach($param as $key=>$value){                $tip = "$key=$value ";                array_push($arr,$tip);            }            $option = implode(' and ',$arr);        }else{            return false;        }        return $option;    }    /*     * 查询表达式$options处理函数     * @access protected     * @return string 处理后字符串数据     * */    protected function option(){        $options = $this->options;        $option = '';        if(isset($options['where'])){            $option .= 'where '.$options['where'].' ';        }        if(isset($options['order'])){            $option .= 'order by '.$options['order'].' '.$options['order_type'].' ';        }        if(isset($options['limit'])){            $option .= 'limit '.$options['limit'];        }        return $option;    }    /*     * 根据查询表达式查询数据(符合条件的所有记录)     * @access public     * @return array 满足查询表达式的特定数据     * */    public function find(){        $option = self::option();        $sql = 'select * from '.$this->_table.' '.$option;        $search_res = mysqli_query($this->_dbObj,$sql);        $msg = self::query_handle($search_res);        return $msg;    }    /*     * 查询表达式 where处理函数     * @access public     * @param mixed $where where查询条件     * @return object $this     * */    public function where($where){        $this->options['where'] = self::options_handle($where);        return $this;    }    /*     * 查询表达式 limit处理函数     * @access public     * @param mixed $limit limit查询条件(数字)     * @return object $this     * */    public function limit($limit){        $this->options['limit'] = self::options_handle($limit);        return $this;    }    /*     * 查询表达式 order处理函数     * @access public     * @param string $order order查询条件     * @param string $type order查询条件的顺序(默认降序)     * @return object $this     * */    public function order($order,$type='desc'){        $this->options['order'] = $order;        $this->options['order_type'] = $type;        return $this;    }    /*     * 数据处理函数(最多处理二维数据)     * @access public     * @param array $data 需要插入的数据     * @return object $this     * */    public function data(array $data){        $values = array();        $fields = array();        if(is_array($data)){            foreach($data as $key=>$value){                if(is_array($value)){       //二维数组                    $tip = 1;                    array_push($values,'('.implode(',',array_values($value)).')');                    array_push($fields,'('.implode(',',array_keys($value)).')');                }else{      //一维数组                    $tip = 0;                }            }        }else{            return false;        }        if(!$tip){            array_push($values,'('.implode(',',array_values($data)).')');            array_push($fields,'('.implode(',',array_keys($data)).')');        }        $this->data['fields'] = $fields[0];        $this->data['values'] = implode(',',$values);        return $this;    }    /*     * 数据新增函数     * @access public     * @return mixed 数据库新增信息     * */    public function add(){        $fields = $this->data['fields'];        $values = $this->data['values'];        $sql = 'INSERT INTO '.$this->_table.$fields.'VALUES'.$values;        $res = mysqli_query($this->_dbObj,$sql);        return $res;    }    /*     * 数据更新函数(一维数组)     * @access public     * @param array $data 需要更新的数据     * @return mixed 数据库新增信息     * */    function save(array $data){        $tip = array();        if(is_array($data)){            foreach($data as $key=>$value){                array_push($tip,"$key=$value");            }        }else{            return false;        }        $set_msg = implode(',',$tip);        $sql = 'UPDATE '.$this->_table.' SET '.$set_msg.' WHERE '.$this->options['where'];        $res = mysqli_query($this->_dbObj,$sql);        return $res;    }    /*     * 数据删除函数     * @access public     * @return mixed 数据库删除信息     * */    public function delete(){        $sql = 'DELETE FROM '.$this->_table.' WHERE '.$this->options['where'];        $res = mysqli_query($this->_dbObj,$sql);        return $res;    }    /*     * SQL语句查询     * */    public function query($sql){        $search_res = mysqli_query($this->_dbObj,$sql);        return $search_res;    }    /*     * mysql中查询语句     * */    protected function sql(){        /*         * 基本SQL语句         * 插入数据:INSERT INTO tb_name(id,name,score)VALUES(NULL,'张三',140),(NULL,'张四',178),(NULL,'张五',134);         * 更新语句:UPDATE tb_name SET score=189 WHERE id=2;         * 删除数据:DELETE FROM tb_name WHERE id=3;         * WHERE语句:SELECT * FROM tb_name WHERE id=3;         * HAVING 语句:SELECT * FROM tb_name GROUP BY score HAVING count(*)>2         * 相关条件控制符:=、>、<、<>、IN(1,2,3......)、BETWEEN a AND b、NOT AND 、OR Linke()用法中      %  为匹配任意、  _  匹配一个字符(可以是汉字)IS NULL 空值检测         * MySQL的正则表达式:SELECT * FROM tb_name WHERE name REGEXP '^[A-D]'   //找出以A-D 为开头的name         * */    }    /*     * 关闭连接     * */    public function close(){        $close = mysqli_close($this->_dbObj);        if($close){            return true;        }else{            return false;        }    }    function __destruct(){        mysqli_close($this->_dbObj);    }}

操作示例:
首先实例化此类,其中需要输入host(数据库地址)、user(数据库用户)、password(数据库用户密码)、database(数据库名称)此四种信息,进行数据库的连接,然后即可调用select_table()方法,其中传入数据表名,从而设置对指定表的操作,从而即可利用连贯操作进行相应数据的增删改查。 其中参数基本均支持字符串和数组两种形式。

include '/classes/db.php';            $db = new /Database('localhost', 'root', '901230', 'weixin');            //$db = new /mysqli('localhost','root','901230','weixin');            //$db->select_db('visitor');            //dump($db->error());            //$db->change_user('helen','901230');            $table = 'zyd_fuweng_user';            //dump($db->select_table_fields($table));            //dump($db->error());            $db->select_table($table);            $param1 = '123';            $param2 = 'id>1,record>100';            $param3 = array(                /*array('count'=>1,'openid'=>'123','record'=>'100'),                array('count'=>2,'openid'=>'234','record'=>'200'),*/                array('count' => 4, 'openid' => '456', 'record' => '500')            );            $param4 = array('count' => 4, 'openid' => '456', 'record' => '500');            //dump($db->where('id=4')->save($param4));            dump($db->where('count=4')->delete());            die;            dump($db->data($param3)->add());            dump(array_keys($param3));            dump(array_values($param3));            dump(implode(',', array_values($param3)));            dump(implode(',', array_keys($param3)));            dump($db->where($param2)->order('id')->limit(2)->find());            dump($db->options_handle($param1));            dump($db->options_handle($param2));            dump($db->options_handle($param3));            $array = array('id', 'count');            $num = '123';            if (is_string($num)) {                echo 'true';            }            dump($db->getField($array));            dump($db->select_table_fields($table));            /*$array = array('a','b');            $array1 = array();            dump($db->getField('a,b'));            dump($db->getField($array));            dump($db->getField($array1));            dump($db->getField(''));*/            /*$str = '';            if(empty($str)){                echo 'true';            }*/            /*$model = M('zyd_fuweng_user');            $res = $model->getField('create_time,count');            dump($res);*/            die;            //            $table = 'zyd_fuweng_user';            //选择指定的数据库,并返回其中全部信息            $table_msg = $db->select_table($table);            //选择指定数据库,返回数据库的字段信息            $table_field_msg = $db->select_table_fields($table);            //条件搜索,传入条件均为数据            $where = array(                'id' => 1            );            $data = array(                'headimgurl' => 'helen.jpg'            );            dump($db->where($where)->field('field'));            dump($table);            /*$dbObj = new /mysqli('localhost','helen','901230','weixin','3306');            //$query = 'select * from zyd_fuweng_user';            $query = 'show fields from zyd_fuweng_user';            $tables = mysqli_query($dbObj,$query);            //dump($tables);            $count = $tables->num_rows;            $arr = array();            for($i=0;$i<$count;$i++){                $row = $tables->fetch_assoc();                //dump($row);                array_push($arr,$row);            }            mysqli_free_result($tables);            dump($arr);            die;            $query1 = 'select * from zyd_fuweng_user';            $table_msg = mysqli_query($dbObj,$query1);            //输出查询结果            $num = $table_msg->num_rows;            for($i=0;$i<$num;$i++){                $row = $table_msg->fetch_assoc();                dump($row);            }            dump($dbObj);            dump($tables);            dump($table_msg);            $res = mysqli_close($dbObj);            dump($res);*/
  • 上一篇:Keepalived+HAProxy实现MySQL高可用负载均衡的配置_MySQL
  • 下一篇:MMM高可用MySQL服务集群解决方案_MySQL