如何使用mysqli在数据库中插入动态多维数组

时间:2014-09-08 14:24:24

标签: php arrays multidimensional-array mysqli

我有以下数组:

Array
(
    [step1] => 3
    [step2] => Array
        (
            [1] => Array
                (
                    [type] => 2
                    [price] => 312.5
                )

            [0] => Array
                (
                    [type] => 1
                    [price] => 51.5
                )

        )

    [step3] => Array
        (
            [first_name] => Test
            [last_name] => Test
        )

    [step4] => Some answer
)

我想在数据库中插入。 Step2可以拥有用户想要的任意数量的项目。您可能已经注意到step2的2个数组之间存在差异。 step3还可以包含更多字段。这完全取决于用户。

它是动态的原因是因为用户可以管理仪表板中的表单输入字段。

我尝试为每个插入步骤做一个foreach循环,但这不能很好地工作。我想要做的是:具有动态查询,以便每个字段都可以插入数据库中。我认为最简单的方法是在step2上执行foreach循环,这样每个项目都有其他值。我的问题是如何使用mysqli(OOP)将这个多维数组中的所有数据插入到数据库中。

还检查了一些像这样的其他问题: Inserting data into MySQL from a multidimensional array in phpinsert multiple rows via a php array into mysqlinsert php array into mysql 但这些对我没有帮助。所以implode()不会帮助我。序列化也不会起作用,因为每个字段在数据库中都有自己的字段。 (当用户编辑数据库中仪表板字段中的表单时也会更改)

提前致谢

1 个答案:

答案 0 :(得分:0)

我最终创建了第二个表来存放所有订单详细信息。我编辑的另一个表,它可以保存所有用户数据。 orders表还有一个userId链接。

然后我创建了一个插入所有用户数据的函数:

function insertUserData($array, $table) {

   $tbl_fields = $this->tableFields($table); 

    $query = "INSERT INTO `user_orders` ("; // Query
    foreach($array as $field => $value) {  
       if(array_key_exists($field, $tbl_fields)) {
            $query .= "`$field`, ";
       }
    }

    $query .= ") VALUES ("; // Add to query
    foreach($array as $field => $value) {  
       if(array_key_exists($field, $tbl_fields)) {
            $query .= "'$value', ";
       }
    }

    $query .=")"; // End 
    //echo $query; //Query output

    if($db->mysqli->query($query)) {
        $insert_id = $db->mysqli->insert_id;
    } else {
        echo 'Something went wrong';
    }
    return $insert_id;
}

对于第2步,我可以执行以下操作:

foreach($data['stap2'] as $key => $array) {
        $query = "INSERT INTO `orders` (";
        foreach($array as $field => $value) {
            if(array_key_exists($field, $table)) {
                $query .= "`$field`, ";
            }
        } 

        $query .= "`order_id`) VALUES (";

        foreach($array as $field => $value) {
            if(array_key_exists($field, $table)) {
                $query .= "'$value', ";
            }
        }
        $query .= "'$insert_id')";
        echo $query.'<br>';
    }

我检查每个字段到表中的字段。如果它们相等,则将它们添加到查询中。这样我就创建了一个动态查询。 这解决了我的问题。