A-A+

thinkphp实现对mysql数据表字段增删改查

2017年11月18日 PHP开源系统 评论 3 条 阅读 0 views 次

在后台的控制器当中,对MYSQL数据表进行直接的管理,相当于一个小型的phpmyadmin,目前thinkphp就有这样的一个需求,其中mysql表的字段可以在后台进行增删改查的操作,其实在大多数的CMS系统中都有这样的功能,这样做的好处就是可以灵活使用mysql数据表,在后台直接新建一个表单模型,然后生成一个完整表单。

好了,既然后台可以直接控制mysql数据表,哪么肯定是需要先做一个model层,然后在C层进行调用,在thinkphp中也有这样的实例类,从网上找到的一个实例类,代码如下:

  1. class MysqlManage{  
  2.    /*创建数据库,并且主键是aid 
  3.     * table 要查询的表名 
  4.     */  
  5.    function createTable($table){  
  6.        $sql="CREATE TABLE IF NOT EXISTS `$table` (`aid` INT NOT NULL primary key)ENGINE = InnoDB;";  
  7.        M()->execute($sql);  
  8.        $this->checkTable($table);  
  9.    }  
  10.    /* 
  11.     * 检测表是否存在,也可以获取表中所有字段的信息 
  12.     * table 要查询的表名 
  13.     * return 表里所有字段的信息 
  14.     */  
  15.    function checkTable($table){  
  16.        $sql="desc `$table`";  
  17.        $info=M()->execute($sql);  
  18.        return $info;  
  19.    }  
  20.   
  21.    /* 
  22.     * 检测字段是否存在,也可以获取字段信息(只能是一个字段) 
  23.     * table 表名 
  24.     * field 字段名 
  25.     */  
  26.    function checkField($table,$field){  
  27.        $sql='desc `$table$field';  
  28.        $info=M()->execute($sql);  
  29.        return $info;  
  30.    }  
  31.   
  32.    /* 
  33.     * 添加字段 
  34.     * table 表名 
  35.     * info  字段信息数组 array 
  36.     * return 字段信息 array 
  37.     */  
  38.    function addField($table,$info){  
  39.        $sql="alter table `$table` add column";  
  40.        $sql.=$this->filterFieldInfo();  
  41.        M()->execute($sql);  
  42.        $this->checkField($table,$info['name']);  
  43.    }  
  44.   
  45.    /* 
  46.     * 修改字段 
  47.     * 不能修改字段名称,只能修改 
  48.     */  
  49.    function editField($table,$info){  
  50.        $sql="alter table `$table` modify ";  
  51.        $sql.=$this->filterFieldInfo($info);  
  52.        M()->execute($sql);  
  53.        $this->checkField($table,$info['name']);  
  54.    }  
  55.   
  56.    /* 
  57.     * 字段信息数组处理,供添加更新字段时候使用 
  58.     * info[name]   字段名称 
  59.     * info[type]   字段类型 
  60.     * info[length]  字段长度 
  61.     * info[isNull]  是否为空 
  62.     * info['default']   字段默认值 
  63.     * info['comment']   字段备注 
  64.     */  
  65.    private function filterFieldInfo($info){  
  66.        if(!is_array($info))  
  67.            return  
  68.        $newInfo=array();  
  69.        $newInfo['name']=$info['name'];  
  70.        $newInfo['type']=$info['type'];  
  71.        switch($info['type']){  
  72.            case 'varchar':  
  73.            case 'char':  
  74.                $newInfo['length']=emptyempty($info['length'])?100:$info['length'];  
  75.                $newInfo['isNull']=$info['isNull']==1?'NULL':'NOT NULL';  
  76.                $newInfo['default']=emptyempty($info['default'])?'':'DEFAULT '.$info['default'];  
  77.                $newInfo['comment']=emptyempty($info['comment'])?'':'COMMENT '.$info['comment'];  
  78.                                 break;  
  79.            case 'int':  
  80.                $newInfo['length']=emptyempty($info['length'])?7:$info['length'];  
  81.                $newInfo['isNull']=$info['isNull']==1?'NULL':'NOT NULL';  
  82.                $newInfo['default']=emptyempty($info['default'])?'':'DEFAULT '.$info['default'];  
  83.                $newInfo['comment']=emptyempty($info['comment'])?'':'COMMENT '.$info['comment'];  
  84.                                 break;  
  85.            case 'text':  
  86.                $newInfo['length']='';  
  87.                $newInfo['isNull']=$info['isNull']==1?'NULL':'NOT NULL';  
  88.                $newInfo['default']='';  
  89.                $newInfo['comment']=emptyempty($info['comment'])?'':'COMMENT '.$info['comment'];  
  90.                                break;  
  91.        }  
  92.        $sql=$newInfo['name']." ".$newInfo['type'];  
  93.        $sql.=(!emptyempty($newInfo['length']))?($newInfo['length']) .' ':' ';  
  94.        $sql.=$newInfo['isNull'].' ';  
  95.        $sql.=$newInfo['default'];  
  96.        $sql.=$newInfo['comment'];  
  97.        return $sql;  
  98.    }  
  99.   
  100.    /* 
  101.     * 删除字段 
  102.     * 如果返回了字段信息则说明删除失败,返回false,则为删除成功 
  103.     */  
  104.    function dropField($table,$field){  
  105.        $sql="alter table `$table` drop column $field";  
  106.        M()->execute($sql);  
  107.        $this->checkField($table,$filed);  
  108.    }  
  109.   
  110.    /* 
  111.     * 获取指定表中指定字段的信息(多字段) 
  112.     */  
  113.    function getFieldInfo($table,$field){  
  114.        $info=array();  
  115.        if(is_string($field)){  
  116.            $this->checkField($table,$field);  
  117.        }else{  
  118.            foreach($field as $v){  
  119.                $info[$v]=$this->checkField($table,$v);  
  120.            }  
  121.        }//www.xiariboke.net  
  122.        return $info;  
  123.    }  

这个实例比较完整,可以创建数据库以及数据表,我这里的需求是不需要再创建库和表了,有了现成的,所以仅使用了下面字段增删改查的功能,不过在thinkphp3.2中的兼容性不是很好,竟然有些都不能够使用,所以需要在这个基础上去修改一些代码了。

标签:

3 条留言  访客:3 条  博主:0 条

  1. Mrxn

    博主 对TP研究挺多啊

  2. 米扑博客

    很不错的插件,我正在使用 SyntaxHighlighter Evolved 感觉太重了

  3. 历史趣谈

    很有含金量的文章,谢谢博主分享

给我留言