mysql 插入多行时结构不一致

编程小白

问题描述

如何插入多行数据时,插入的数据结构不一致?

insert([
    ['email' => 'taylor@example.com', 'votes' => 0],
    ['email' => 'dayle@example.com', 'votes' => 0,'name'=>'test']
]);
779 3 0
3个回答

tanhongbin

这种情况你要处理一下数据,给默认值,查出来所有的字段,然后再循环判断一下,如果没有这个字段给一个默认值,就ok了

  • 编程小白 2023-04-11

    😂😂😂,好像确实只能这样了

  • tanhongbin 2023-04-11

    没啥特别好的办法

  • 编程小白 2023-04-11

    public static function completeData($arr){
    $keys = array_keys(array_reduce($arr, function($carry, $item) {
    return array_merge($carry, $item);
    }, []));
    foreach ($arr as &$item) {
    $item = array_merge(array_fill_keys($keys, null), $item);
    }
    return $arr;
    }

    最终我这样写了

liuyan814

可以考虑用think-orm,挺好用的。

不败少龙

就要看你不传的字段是不是必传参数了

  • 编程小白 2023-04-11

    前端传过来的字段不确定😂

  • 不败少龙 2023-04-11

    那表里面的必填字段 改成非必填就不会出现问题(除了ID)

  • 编程小白 2023-04-11

    PDOException: SQLSTATE[21S01]: Insert value list does not match column list: 1136 Column count doesn't match value count at row 3

    保这个错

  • 不败少龙 2023-04-11

    是不是有不存在的字段哦

  • 编程小白 2023-04-11

    我现在是循环了一次,给了默认值
    insert([
    ['email' => 'taylor@example.com', 'votes' => 0,'name'=>NULL],
    ['email' => 'dayle@example.com', 'votes' => 0,'name'=>'test']
    ]);

  • 不败少龙 2023-04-11

    插入值与列数据不匹配

  • 编程小白 2023-04-11

    字段是动态添加的😂

年代过于久远,无法发表回答
×
🔝