【问题标题】:How to insert dynamic multidimensional array in database with mysqli如何使用 mysqli 在数据库中插入动态多维数组
【发布时间】:2014-11-01 19:20:19
【问题描述】:

我有以下数组:

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 php, insert multiple rows via a php array into mysql, insert php array into mysql 但这些对我没有帮助。所以implode() 不会帮助我。由于每个字段在数据库中都有自己的字段,因此序列化也不起作用。 (当用户在数据库中的仪表板字段中编辑表单时,也会发生更改)

提前致谢

【问题讨论】:

  • 你的mysql表结构是什么样的?如果您不需要对这些字段运行查询,只需序列化数组并将其保存在单个字段中
  • 哦,是的,谢谢你提醒我序列化。这对我没有帮助,但它提醒我需要编辑问题
  • 您是否考虑过为每个数组创建一个对象并为每个包含正确查询并将其插入数据库的对象定义一个 insert() 方法。
  • @nismoracerx 我没有考虑过,所以我会尝试一下谢谢
  • 如果您需要更多帮助,您需要解释您的数据库结构

标签: php arrays multidimensional-array mysqli


【解决方案1】:

我最终创建了第二张表来存放所有订单详细信息。我编辑的另一个表可以保存所有用户数据。 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>';
    }

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

【讨论】:

    猜你喜欢
    • 2017-05-18
    • 2016-07-29
    • 2015-06-08
    • 1970-01-01
    • 2017-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多