A-A+
thinkphp实现对mysql数据表字段增删改查
在后台的控制器当中,对MYSQL数据表进行直接的管理,相当于一个小型的phpmyadmin,目前thinkphp就有这样的一个需求,其中mysql表的字段可以在后台进行增删改查的操作,其实在大多数的CMS系统中都有这样的功能,这样做的好处就是可以灵活使用mysql数据表,在后台直接新建一个表单模型,然后生成一个完整表单。
好了,既然后台可以直接控制mysql数据表,哪么肯定是需要先做一个model层,然后在C层进行调用,在thinkphp中也有这样的实例类,从网上找到的一个实例类,代码如下:
- class MysqlManage{
- /*创建数据库,并且主键是aid
- * table 要查询的表名
- */
- function createTable($table){
- $sql="CREATE TABLE IF NOT EXISTS `$table` (`aid` INT NOT NULL primary key)ENGINE = InnoDB;";
- M()->execute($sql);
- $this->checkTable($table);
- }
- /*
- * 检测表是否存在,也可以获取表中所有字段的信息
- * table 要查询的表名
- * return 表里所有字段的信息
- */
- function checkTable($table){
- $sql="desc `$table`";
- $info=M()->execute($sql);
- return $info;
- }
- /*
- * 检测字段是否存在,也可以获取字段信息(只能是一个字段)
- * table 表名
- * field 字段名
- */
- function checkField($table,$field){
- $sql='desc `$table` $field';
- $info=M()->execute($sql);
- return $info;
- }
- /*
- * 添加字段
- * table 表名
- * info 字段信息数组 array
- * return 字段信息 array
- */
- function addField($table,$info){
- $sql="alter table `$table` add column";
- $sql.=$this->filterFieldInfo();
- M()->execute($sql);
- $this->checkField($table,$info['name']);
- }
- /*
- * 修改字段
- * 不能修改字段名称,只能修改
- */
- function editField($table,$info){
- $sql="alter table `$table` modify ";
- $sql.=$this->filterFieldInfo($info);
- M()->execute($sql);
- $this->checkField($table,$info['name']);
- }
- /*
- * 字段信息数组处理,供添加更新字段时候使用
- * info[name] 字段名称
- * info[type] 字段类型
- * info[length] 字段长度
- * info[isNull] 是否为空
- * info['default'] 字段默认值
- * info['comment'] 字段备注
- */
- private function filterFieldInfo($info){
- if(!is_array($info))
- return
- $newInfo=array();
- $newInfo['name']=$info['name'];
- $newInfo['type']=$info['type'];
- switch($info['type']){
- case 'varchar':
- case 'char':
- $newInfo['length']=emptyempty($info['length'])?100:$info['length'];
- $newInfo['isNull']=$info['isNull']==1?'NULL':'NOT NULL';
- $newInfo['default']=emptyempty($info['default'])?'':'DEFAULT '.$info['default'];
- $newInfo['comment']=emptyempty($info['comment'])?'':'COMMENT '.$info['comment'];
- break;
- case 'int':
- $newInfo['length']=emptyempty($info['length'])?7:$info['length'];
- $newInfo['isNull']=$info['isNull']==1?'NULL':'NOT NULL';
- $newInfo['default']=emptyempty($info['default'])?'':'DEFAULT '.$info['default'];
- $newInfo['comment']=emptyempty($info['comment'])?'':'COMMENT '.$info['comment'];
- break;
- case 'text':
- $newInfo['length']='';
- $newInfo['isNull']=$info['isNull']==1?'NULL':'NOT NULL';
- $newInfo['default']='';
- $newInfo['comment']=emptyempty($info['comment'])?'':'COMMENT '.$info['comment'];
- break;
- }
- $sql=$newInfo['name']." ".$newInfo['type'];
- $sql.=(!emptyempty($newInfo['length']))?($newInfo['length']) .' ':' ';
- $sql.=$newInfo['isNull'].' ';
- $sql.=$newInfo['default'];
- $sql.=$newInfo['comment'];
- return $sql;
- }
- /*
- * 删除字段
- * 如果返回了字段信息则说明删除失败,返回false,则为删除成功
- */
- function dropField($table,$field){
- $sql="alter table `$table` drop column $field";
- M()->execute($sql);
- $this->checkField($table,$filed);
- }
- /*
- * 获取指定表中指定字段的信息(多字段)
- */
- function getFieldInfo($table,$field){
- $info=array();
- if(is_string($field)){
- $this->checkField($table,$field);
- }else{
- foreach($field as $v){
- $info[$v]=$this->checkField($table,$v);
- }
- }//www.xiariboke.net
- return $info;
- }
这个实例比较完整,可以创建数据库以及数据表,我这里的需求是不需要再创建库和表了,有了现成的,所以仅使用了下面字段增删改查的功能,不过在thinkphp3.2中的兼容性不是很好,竟然有些都不能够使用,所以需要在这个基础上去修改一些代码了。
博主 对TP研究挺多啊
很不错的插件,我正在使用 SyntaxHighlighter Evolved 感觉太重了
很有含金量的文章,谢谢博主分享