热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

使用过ThinkPHP框架的同学可能会对于其中数据库模型操作特别有好感,ThinkPHP提供了数据库操作的简单的操作,对于连接数据库,数据库的增删改查等数据操作都非常的nice,同时支持连贯操作,对于那些不习惯
使用过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 = &#39;Tables_in_&#39;.$this->_database;
                array_push($tables_msg[&#39;tables&#39;],$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 = &#39;select * from &#39;.$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 = &#39;show fields from &#39;.$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 = &#39;select &#39;.$index.&#39; from &#39;.$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(&#39;,&#39;,$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(&#39;,&#39;,$param);
            $count = count($params);
            $option = implode(&#39; and &#39;,$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(&#39; and &#39;,$arr);
        }else{
            return false;
        }
        return $option;
    }
    /*
     * 查询表达式$options处理函数
     * @access protected
     * @return string 处理后字符串数据
     * */
    protected function option(){
        $optiOns= $this->options;
        $option = &#39;&#39;;
        if(isset($options[&#39;where&#39;])){
            $option .= &#39;where &#39;.$options[&#39;where&#39;].&#39; &#39;;
        }
        if(isset($options[&#39;order&#39;])){
            $option .= &#39;order by &#39;.$options[&#39;order&#39;].&#39; &#39;.$options[&#39;order_type&#39;].&#39; &#39;;
        }
        if(isset($options[&#39;limit&#39;])){
            $option .= &#39;limit &#39;.$options[&#39;limit&#39;];
        }
        return $option;
    }
    /*
     * 根据查询表达式查询数据(符合条件的所有记录)
     * @access public
     * @return array 满足查询表达式的特定数据
     * */
    public function find(){
        $option = self::option();
        $sql = &#39;select * from &#39;.$this->_table.&#39; &#39;.$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[&#39;where&#39;] = self::options_handle($where);
        return $this;
    }
    /*
     * 查询表达式 limit处理函数
     * @access public
     * @param mixed $limit limit查询条件(数字)
     * @return object $this
     * */
    public function limit($limit){
        $this->options[&#39;limit&#39;] = 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=&#39;desc&#39;){
        $this->options[&#39;order&#39;] = $order;
        $this->options[&#39;order_type&#39;] = $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,&#39;(&#39;.implode(&#39;,&#39;,array_values($value)).&#39;)&#39;);
                    array_push($fields,&#39;(&#39;.implode(&#39;,&#39;,array_keys($value)).&#39;)&#39;);
                }else{      //一维数组
                    $tip = 0;
                }
            }
        }else{
            return false;
        }
        if(!$tip){
            array_push($values,&#39;(&#39;.implode(&#39;,&#39;,array_values($data)).&#39;)&#39;);
            array_push($fields,&#39;(&#39;.implode(&#39;,&#39;,array_keys($data)).&#39;)&#39;);
        }
        $this->data[&#39;fields&#39;] = $fields[0];
        $this->data[&#39;values&#39;] = implode(&#39;,&#39;,$values);
        return $this;
    }
    /*
     * 数据新增函数
     * @access public
     * @return mixed 数据库新增信息
     * */
    public function add(){
        $fields = $this->data[&#39;fields&#39;];
        $values = $this->data[&#39;values&#39;];
        $sql = &#39;INSERT INTO &#39;.$this->_table.$fields.&#39;VALUES&#39;.$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(&#39;,&#39;,$tip);
        $sql = &#39;UPDATE &#39;.$this->_table.&#39; SET &#39;.$set_msg.&#39; WHERE &#39;.$this->options[&#39;where&#39;];
        $res = mysqli_query($this->_dbObj,$sql);
        return $res;
    }
    /*
     * 数据删除函数
     * @access public
     * @return mixed 数据库删除信息
     * */
    public function delete(){
        $sql = &#39;DELETE FROM &#39;.$this->_table.&#39; WHERE &#39;.$this->options[&#39;where&#39;];
        $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,&#39;张三&#39;,140),(NULL,&#39;张四&#39;,178),(NULL,&#39;张五&#39;,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 &#39;^[A-D]&#39;   //找出以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 &#39;/classes/db.php&#39;;
            $db = new \Database(&#39;localhost&#39;, &#39;root&#39;, &#39;901230&#39;, &#39;weixin&#39;);
            //$db = new \mysqli(&#39;localhost&#39;,&#39;root&#39;,&#39;901230&#39;,&#39;weixin&#39;);
            //$db->select_db(&#39;visitor&#39;);
            //dump($db->error());
            //$db->change_user(&#39;helen&#39;,&#39;901230&#39;);
            $table = &#39;zyd_fuweng_user&#39;;
            //dump($db->select_table_fields($table));
            //dump($db->error());
            $db->select_table($table);
            $param1 = &#39;123&#39;;
            $param2 = &#39;id>1,record>100&#39;;
            $param3 = array(
                /*array(&#39;count&#39;=>1,&#39;openid&#39;=>&#39;123&#39;,&#39;record&#39;=>&#39;100&#39;),
                array(&#39;count&#39;=>2,&#39;openid&#39;=>&#39;234&#39;,&#39;record&#39;=>&#39;200&#39;),*/
                array(&#39;count&#39; => 4, &#39;openid&#39; => &#39;456&#39;, &#39;record&#39; => &#39;500&#39;)
            );
            $param4 = array(&#39;count&#39; => 4, &#39;openid&#39; => &#39;456&#39;, &#39;record&#39; => &#39;500&#39;);
            //dump($db->where(&#39;id=4&#39;)->save($param4));
            dump($db->where(&#39;count=4&#39;)->delete());

            die;
            dump($db->data($param3)->add());
            dump(array_keys($param3));
            dump(array_values($param3));
            dump(implode(&#39;,&#39;, array_values($param3)));
            dump(implode(&#39;,&#39;, array_keys($param3)));

            dump($db->where($param2)->order(&#39;id&#39;)->limit(2)->find());
            dump($db->options_handle($param1));
            dump($db->options_handle($param2));
            dump($db->options_handle($param3));
            $array = array(&#39;id&#39;, &#39;count&#39;);

            $num = &#39;123&#39;;
            if (is_string($num)) {
                echo &#39;true&#39;;
            }

            dump($db->getField($array));
            dump($db->select_table_fields($table));
            /*$array = array(&#39;a&#39;,&#39;b&#39;);
            $array1 = array();
            dump($db->getField(&#39;a,b&#39;));
            dump($db->getField($array));
            dump($db->getField($array1));
            dump($db->getField(&#39;&#39;));*/
            /*$str = &#39;&#39;;
            if(empty($str)){
                echo &#39;true&#39;;
            }*/
            /*$model = M(&#39;zyd_fuweng_user&#39;);
            $res = $model->getField(&#39;create_time,count&#39;);
            dump($res);*/
            die;
            //
            $table = &#39;zyd_fuweng_user&#39;;
            //选择指定的数据库,并返回其中全部信息
            $table_msg = $db->select_table($table);
            //选择指定数据库,返回数据库的字段信息
            $table_field_msg = $db->select_table_fields($table);
            //条件搜索,传入条件均为数据
            $where = array(
                &#39;id&#39; => 1
            );
            $data = array(
                &#39;headimgurl&#39; => &#39;helen.jpg&#39;
            );
            dump($db->where($where)->field(&#39;field&#39;));
            dump($table);


            /*$dbObj = new \mysqli(&#39;localhost&#39;,&#39;helen&#39;,&#39;901230&#39;,&#39;weixin&#39;,&#39;3306&#39;);
            //$query = &#39;select * from zyd_fuweng_user&#39;;
            $query = &#39;show fields from zyd_fuweng_user&#39;;
            $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 = &#39;select * from zyd_fuweng_user&#39;;
            $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);*/

推荐阅读
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文由编程笔记小编整理,介绍了PHP中的MySQL函数库及其常用函数,包括mysql_connect、mysql_error、mysql_select_db、mysql_query、mysql_affected_row、mysql_close等。希望对读者有一定的参考价值。 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了软件测试知识点之数据库压力测试方法小结相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 本文介绍了如何在MySQL中将零值替换为先前的非零值的方法,包括使用内联查询和更新查询。同时还提供了选择正确值的方法。 ... [详细]
  • 在数据分析工作中,我们通常会遇到这样的问题,一个业务部门由若干业务组构成,需要筛选出每个业务组里业绩前N名的业务员。这其实是一个分组排序的 ... [详细]
  • Oracle Database 10g许可授予信息及高级功能详解
    本文介绍了Oracle Database 10g许可授予信息及其中的高级功能,包括数据库优化数据包、SQL访问指导、SQL优化指导、SQL优化集和重组对象。同时提供了详细说明,指导用户在Oracle Database 10g中如何使用这些功能。 ... [详细]
  • 本文详细介绍了MysqlDump和mysqldump进行全库备份的相关知识,包括备份命令的使用方法、my.cnf配置文件的设置、binlog日志的位置指定、增量恢复的方式以及适用于innodb引擎和myisam引擎的备份方法。对于需要进行数据库备份的用户来说,本文提供了一些有价值的参考内容。 ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • Oracle分析函数first_value()和last_value()的用法及原理
    本文介绍了Oracle分析函数first_value()和last_value()的用法和原理,以及在查询销售记录日期和部门中的应用。通过示例和解释,详细说明了first_value()和last_value()的功能和不同之处。同时,对于last_value()的结果出现不一样的情况进行了解释,并提供了理解last_value()默认统计范围的方法。该文对于使用Oracle分析函数的开发人员和数据库管理员具有参考价值。 ... [详细]
  • 本文介绍了通过mysql命令查看mysql的安装路径的方法,提供了相应的sql语句,并希望对读者有参考价值。 ... [详细]
author-avatar
Mini_敏児
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有