ZFSYS

更新字段,避免字段报错问题

78
public function handle_update_db_zdxg(){
        try{
            //指定表,隐藏则所有表
            // if($this->db_tbs!=''){
            //     $change_tbs = explode(',',$this->db_tbs);
            // }
            // if($this->db_fields!=''){
            //     $change_fields = explode(',',$this->db_fields);
            // }
            $list = Db::query("SHOW TABLE STATUS");
            foreach($list as $k=>$vo){
                if(isset($vo['Name'])){
                    foreach($vo as $_kk=>$_vv){
                        $vo[strtolower($_kk)] = $_vv;
                    }
                }
                if(isset($change_tbs) && !in_array($vo['name'],$change_tbs)){
                    continue;
                }
                $tb_fields = Db::query("show columns from ".$vo['name']);
                foreach($tb_fields as $kk=>$vv){
                    if(isset($vv['Field'])){
                        foreach($vv as $kkk=>$vvv){
                            $vv[strtolower($kkk)] = $vvv;
                        }
                    }
                    //指定某个字段
                    if(isset($change_fields) && !in_array($vv['field'],$change_fields)){
                        continue;
                    }
                    // if($vv['null']=='NO' && $vv['default']===NULL && $vv['key']!='PRI' && $vv['type']!='text' && !is_str_find($vv['type'],'text')){ 
                    if($vv['null']=='NO' && $vv['default']===NULL && $vv['key']!='PRI' ){ 
                        if(is_str_find($vv['type'],'varchar')){
                            Db::query('ALTER TABLE '.$vo['name'].' ALTER COLUMN `'.$vv['field'].'` SET DEFAULT ""');
                        }elseif(is_str_find($vv['type'],'int')){
                            Db::query('ALTER TABLE '.$vo['name'].' ALTER COLUMN `'.$vv['field'].'` SET DEFAULT "0"');
                        }elseif(is_str_find($vv['type'],'text')){
                            Db::query('ALTER TABLE '.$vo['name'].' CHANGE `'.$vv['field'].'` `'.$vv['field'].'` text COLLATE "utf8_general_ci" NULL');
                        }elseif(is_str_find($vv['type'],'decimal')){
                            // decimal(11,2)
                            $isMatched = preg_match_all('/decimal(.*?),(.*?)\)/', $vv['type'], $matches);
                            if($isMatched==1 && isset($matches[2]) && $matches[2]!=''){
                                $_str = str_pad('0.',intval($matches[2][0])+2,'0');
                                Db::query('ALTER TABLE '.$vo['name'].' ALTER COLUMN `'.$vv['field'].'` SET DEFAULT "'.$_str.'"');
                            }
                        }else{
                            // dd($vv);
                        }
                    }
                }
            }
        } catch (\Exception $e) {
            if($this->yun_trylog_is){ logOutput('a:_update_plugind_db  msg:'.$e->getMessage(),'zfcommon_try'); }
        }
        echo 'ok';
    }


  • 没有任何评论
最新帖子
[站长推荐] 一些站长/创业者使用的工具推荐 591
HTML+JS 全选与取消全选功能 545
子枫内容系统更新记录 449
有没有人做百度小程序啊 447
PHP 按照指定数量切割字符串 392
php composer更换国内源 375
a链接一键安装ios应用 372
composer 报错SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify 347
layui table 的宽度超出自动隐藏 343
怎么克服拖延症呀 339
最近热帖
[站长推荐] 一些站长/创业者使用的工具推荐 591
HTML+JS 全选与取消全选功能 545
子枫内容系统更新记录 449
有没有人做百度小程序啊 447
PHP 按照指定数量切割字符串 392
php composer更换国内源 375
a链接一键安装ios应用 372
composer 报错SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify 347
layui table 的宽度超出自动隐藏 343
怎么克服拖延症呀 339
近期热议
开始使用 161