首页 > 编程语言 >php批量更新

php批量更新

时间:2023-04-28 10:01:12浏览次数:45  
标签:string 批量 更新 values param array php where

/***
     * 批量更新
     * @param  string $table  表名
     * @param  array  $values 更新字段(二维数组)
     * @param  string $index  key值(主键)
     * @param  array  $where  where条件 [['user_sn', '=', 2010000760], ['nick', '=', 'jack']]
     * @return bool
     */
    public static function batchUpdate(string $table, array $values, string $index, array $where = [])
    {
        if (sizeof($values) <=0 || empty($index) || empty($table)) {
            return false;
        }

        $sets      = $bindings = [];
        $updateSql = "UPDATE `" . $table . "` SET " ;

        $data = array_keys($values[0]);
        //index必须包含数据集合的键里面
        if (!in_array($index, $data)) {
            return false;
        }
        $data = array_diff($data, [$index]);
        foreach ($data as $field) {
            $setSql = '`' . $field . '` = (CASE ';
            foreach ($values as $val) {
                $setSql .= 'WHEN `' . $index . '` = ? THEN ? ';
                $value      = (is_null($val[$field]) ? 'NULL' : $val[$field]);
                $bindings[] = $val[$index];
                $bindings[] = $value;
            }
            $setSql .= 'ELSE `'.$field.'` END) ';
            $sets[]  = $setSql;
        }
        $updateSql .= implode(', ', $sets);
        $whereIn    = array_column($values, $index);
        $bindings   = array_merge($bindings, $whereIn);
        $whereIn    = rtrim(str_repeat('?,', sizeof($whereIn)),',');

        //拼接where
        if (!empty($where)) {
            $operatorSymbol = ['=', '>', '<', '>=', '<=', '!='];
            $whereStr = '';
            $valueArr = [];
            foreach ($where as $v) {
               if (empty($v[0]) || empty($v[1]) || empty($v[2])) {
                   return false;
               }
               if (!in_array($v[1], $operatorSymbol)) {
                   return false;
               }
               $whereStr .= ' AND' . ' `' . $v[0] . '` ' . $v[1] . ' ?';
               $valueArr[] = $v[2];
            }
            $bindings   = array_merge($bindings, $valueArr);
            $query      = rtrim($updateSql,', ') . " WHERE `$index` IN (" . $whereIn . ")" . $whereStr . ";";
        } else {
            $query      = rtrim($updateSql,', ') . " WHERE `$index` IN (" . $whereIn . ");";
        }
        return DB::update($query,$bindings);
    }

 

标签:string,批量,更新,values,param,array,php,where
From: https://www.cnblogs.com/dawuge/p/17361015.html

相关文章

  • ansible 第一次批量导入ssh-key
    适用环境:所有主机具有相同的用户名和密码实现方式:通过ansiblehosts文件读取主机列表通过expect自动应答脚本出处:githubkubeasz\tools#!/bin/bash#此脚本为批量部署服务器sshkey使用#set-x#checkargscountiftest$#-ne3;thenecho-e"\nUsag......
  • Dynamic crm 使用JS 更新BPF的stage。
    functionupdateProcess(CurrentRecordId,stageId){ 'usestrict'; varfetchXml=  '<fetch>'+  " <entityname='new_approval_process'>"+  "  <attributename='businessprocessflo......
  • Sql Server 数据库事务与锁,同一事务更新又查询锁?期望大家来解惑
    我有一个People表,有三行数据:如果我们没详细了解数据库事务执行加锁的过程中,会不会有这样一个疑问:如下的这段SQL开启了事务,并且在事务中进行了更新和查询操作。BEGINTRAN updatePeoplesetName='张三'whereid=1; select*fromPeoplewhereid=1;committran我......
  • phpstudy配置nginx跨域请问
    add_headerAccess-Control-Allow-Origin*; add_headerAccess-Control-Allow-Methods'GET,POST,OPTIONS'; add_headerAccess-Control-Allow-Headers'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Cont......
  • 我的第一个项目(十二) :分数和生命值的更新(后端增删查改的"改")
    好家伙,写后端,这多是一件美逝.关于这个项目的代码前面的博客有写 我的第一个独立项目-随笔分类-养肥胖虎-博客园(cnblogs.com) 现在,我们登陆进去了,我开始和敌人战斗,诶,打到一百分了,我现在要把这个分数保存起来  1.前端先把测试样例写好 随便写一个测试样......
  • Blender快捷键整理(持续更新)
    A全选AA取消全选(按两次A)Shift+D复制物体(右键或者ESC取消移动)Shift+鼠标中键盘移动视角鼠标滚轮推拉视角鼠标中键按住旋转视角Ggrab移动Sscale缩放Rrotate旋转小键盘.聚焦选中物体波浪键~饼状菜单--查看所选X删除Shift+A添加模型F3搜索(快速烟雾)......
  • PHP8编译安装报错make: *** [ext/fileinfo/libmagic/apprentice.lo] Error 1
    make:***[ext/fileinfo/libmagic/apprentice.lo]错误1 解决:当配置PHP时出现make:***[ext/fileinfo/libmagic/apprentice.lo]Error1时是因为服务器内存不足1G只需要在配置命令中添加--disable-fileinfo即可......
  • buu [极客大挑战 2019]PHP
    打开网页,发现重点是网页备份,所以使用dirsearch进行扫描,20分钟后扫出结果,发现www.zip文件解压后查看index.php,看到页面通过get方法获得select的值,并将其反序列化,传给变量res查看class.php,只有username='admin'且password=100时,执行__destruct()时会输出flag。__destruct()是php......
  • mysql字段类型json更新
    updatetbl_testsettest_json=JSON_REPLACE(test_json,'$."jsonFieldName"',(CAST(test_json->'$."jsonFieldName"'ASSIGNEDINTEGER)-70*365-19)*86400-3600*8)wheret......
  • Ueditor 富文本编辑器 插入 m3u8 和 mp4 视频(PHP)
    当前环境:PHP、Ueditor的版本是1.4.3新的需求是,需要在Ueditor富文本编辑器中,插入视频播放,并且视频格式有MP4,也有M3U8。百度编辑器默认的是embed,需要修改下配置。 ueditor.all.js和 ueditor.config.js这两个文件要改一些东西,具体我这里就不展示了,网上有很多文章都有写。这里......