查询表的所有字段,检查某个字段是否存在
#sqlite $sql = "pragma table_info(jz_article)"; $list = M()->findSql($sql); $field = 'id'; $isgo = false; foreach($list as $v){ if($v['name']==$field){ $isgo = true; //存在 } } #mysql $sql = "SHOW COLUMNS FROM jz_article"; $list = M()->findSql($sql); $field = 'id'; $isgo = false; foreach($list as $v){ if($v['Field']==$field){ $isgo = true; //存在 } }
新增字段,两者差不多,mysql可以增加字段编码,而sqlite不需要增加
#mysql $sql="ALTER TABLE jz_article ADD abc VARCHAR(255) CHARACTER SET utf8 default NULL" #sqlite $sql="ALTER TABLE jz_article ADD abc VARCHAR(255) default NULL"
修改字段,两者差别大
#sqlite #原理:新增一个临时字段,然后创建一个临时表,把原表删除,跟换临时表名 #假设把aaa,字段改为abc $sql="ALTER TABLE jz_article ADD abc VARCHAR(255) default NULL;"; $x = M()->runSql($sql); //查询所有字段 $sql = "pragma table_info(jz_article )"; $list = M()->findSql($sql); $fieldsdata = array(); foreach($list as $v){ if($v['name']!=$old['field'] && $v['name']!=$data['field'].'_jizhi1'){ $fieldsdata[]=$v['name']; } } //创建临时表,查询旧字段作为新字段数据 $sql = "create table temp as select ".implode(',',$fieldsdata).", aaa as abc from jz_article where 1 = 1;"; $sql.="drop table jz_article ;alter table temp rename to jz_article ;"; $x = M()->runSql($sql); #mysql $sql="ALTER TABLE jz_article change aaa abc CHARACTER SET utf8 "; $x = M()->runSql($sql);