php+mysql 批量插入数据封装方法(有则更新,无则插入)

php+mysql 批量插入数据封装方法(有则更新,无则插入)_第1张图片

 作用:批量插入数据,有则更新,无则插入

     /**
     * Function addDataToMysql
     * 批量插入数据到数据库,无则插入,重复则更新
     */

    public function addDataToMysql($data)
    {

        $mysql = $this->_getDatabase(1); //获取mysql 连接实例(根据自己情况处理)

        $buildInsertBatchSqlStr = $this->buildInsertBatchSqlStr($data);
        $sql = $buildInsertBatchSqlStr['sql'];
        $ret = $mysql->doUpdateQuery($sql);

        if ($ret) {
            //返回执行数据条数
            return $buildInsertBatchSqlStr['count'];
        } else {
            return 0;
        }

    }

     /**
     * Function buildInsertBatchSqlStr
     * 组装mysql
     */

    protected function buildInsertBatchSqlStr($data)
    {
        //从data中 获取更新的字段
        if (empty($data)) {
            return false;
        }
        $keys_arr = [];
        $datas_arr = [];
        $where_arr = [];
        foreach ($data as $k => $v) {
            if (!$keys_arr) {
                $keys_arr = array_keys($v);
            }
            //数据重组
            $onedata = "( " . implode(',', $v) . " )";
            $datas_arr[] = $onedata;
            unset($onedata);

        }
        // 组装格式 pt_uid=VALUES(pt_uid),
        foreach ($keys_arr as $k2 => $v2) {
            $where_arr[] = "$v2 = VALUES($v2)";

        }
        $keys_str = implode(',', $keys_arr);
        $datas_str = implode(',', $datas_arr);
        $where_str = implode(',', $where_arr);
        $sql = "";
        if ($keys_str && $datas_str && $where_str) {
            $sql = " INSERT INTO $this->table ( $keys_str ) VALUES $datas_str ON DUPLICATE KEY UPDATE $where_str";
        }
        unset($keys_str, $where_str);
        return ['sql' => $sql, 'count' => count($datas_arr)];
    }

使用方法 调用 addDataToMysql 方法即可。

测试数据 id 为主键,插入名字,id存在则更新名字

 

$data = [
    ['id' => 1,  'name' => '张三' ],
    ['id' => 2,  'name' => '李四' ],
    ['id' => 3,  'name' => '王五' ],
    ['id' => 4,  'name' => '赵六' ],
    ['id' => 5,  'name' => '韩七' ],
];

$this->addDataToMysql($data);

 

你可能感兴趣的:(php,mysql)