PHP批量修改MySQL数据库所有表中某个字段值为新值

由于数据库中用的是用户账户作为用户的判断依据(而不是ID),当用户账户修改时,要同时将其他表中的用户账户同步修改。

代码如下:


//刚开始执行时可以先不传type属性,看看将会修改到哪些表的哪些字段,待确认后再传入&type=do来执行修改操作
public function multipleUser($db = '', $old = '', $new = '', $type = 'check')
    {
        ini_set('memory_limit', '1024M');
        set_time_limit(0);//不限时

        if ($db == '') die();
        if ($old == '') die();
        if ($new == '') die();

        /* 记录数组 */
        $record = array();

        /* 所有表 */
        $sql_tables = 'SELECT TABLE_NAME FROM information_schema.TABLES WHERE table_schema = "'.$db.'"';
        $res_tables = $this->dao->query($sql_tables)->fetchAll();//这是框架函数,请自行执行查询语句
        foreach ($res_tables as $table) {
            $tableName = $table->TABLE_NAME;

            if (strstr($tableName, 'view_')) {
                continue;//排除视图
            }
            
            $sql = 'SELECT * FROM '.$tableName;
            $res = $this->dao->query($sql)->fetchAll();

            foreach ($res as $item) {
                foreach ($item as $key => $val) {
                    if ($val == $old) {
                        $record[$tableName][$key] = 1;
                    }
                }
            }
        }

        foreach ($record as $key => $val) {
            echo $key.'<br/>【';
            foreach ($val as $k => $v) {
                echo $k.'】【';
            }
            echo '】<br/>-------------------------------------<br/>';
        }

        if ($type != 'do') {
            die();
        }
        
        foreach ($record as $table => $cols) {
            foreach ($cols as $col => $val) {
                if ($col == 'bugreason' || $col == 'steps') {
                    continue;
                }
                if ($table == 'zt_user') {
                    continue;
                }
                $this->dao->update($table)->set($col)->eq($new)->where($col)->eq($old)->exec();
            }            
        }
        var_dump('done');
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值