【问题标题】:Insert nested json array into mysql将嵌套的json数组插入mysql
【发布时间】:2016-04-18 06:14:23
【问题描述】:

我正在尝试将 JSON 数组插入到我的 MySQL 数据库中。这是数组的格式:

${
    "customer_id": "1",
    "products":[ {
        "product_id": "1",
        "product_qty": "2"
    }, {
        "product_id": "2",
        "product_qty": "4"
    }, {
        "product_id": "3",
        "product_qty": "12"
    }, {
        "product_id": "4",
        "product_qty": "22"
    }],
    "order_totalamount": "100"
}

我尝试插入如下查询:

 <?php
   require("config.inc.php");
   $jsondata = file_get_contents('OrderFormat.json');
    //convert json object to php associative array
    $data = json_decode($jsondata, true);

   //get the employee details
   $cus_id = $data['customer_id'];
   $product_id = $data['products']['product_id'];
   $product_qty = $data['products']['product_qty'];
   $order_totalamount = $data['order_totalamount'];

        //insert into mysql table
         $sql = "insert into `order`(cm_id,product_id,product_quantity,order_totalamount,order_id,order_date) values ($cus_id,$product_id,$product_qty,$order_totalamount,$cus_id,CURDATE())";

        echo $sql;
        //$sql1 = mysql_query($sql);
        $conn = mysqli_connect($host, $username, $password, $dbname);
        // Check connection
        if (!$conn) {
            die("Connection failed: " . mysqli_connect_error());
        }

        if(!mysqli_query($conn,$sql))
        {
            die('Error : ' . mysql_error());
        }
?>

我还解码 JSON 数据和 foreach 循环。

请在这个问题上帮助我。 提前致谢。

【问题讨论】:

  • 我建议你将值存储在变量中,这样$item['product_id']就变成了$product_id。另外,尝试使用 PDO php.net/manual/en/book.pdo.php
  • 你有什么错误吗?
  • @Noogic :感谢您的建议,但如果我将值存储在变量中,那么嵌套数组也会出现同样的问题。因为我有多个产品具有相同的客户 ID 和金额
  • @AnkiiG:不,我没有收到任何错误,但插入也不起作用。
  • @RU_23 你能添加完整的代码吗?

标签: php mysql arrays json


【解决方案1】:

<?php
$json = '{
    "customer_id": "1",
    "products":[ {
        "product_id": "1",
        "product_qty": "2"
    }, {
        "product_id": "2",
        "product_qty": "4"
    }, {
        "product_id": "3",
        "product_qty": "12"
    }, {
        "product_id": "4",
        "product_qty": "22"
    }],
    "order_totalamount": "100"
}';

$obj = json_decode($json);
$data=$obj->{'products'};
foreach($data as $item){
$sql = "insert into `order`(cm_id,product_id,product_quantity,order_totalamount,order_id,order_date) values ($cus_id,".$item->{'product_id'}.",".$item->{'product_qty'}.",$order_totalamount,$cus_id,CURDATE())";

}


?>

【讨论】:

    【解决方案2】:

    试试这个代码

        $data = json_decode($json_string);
        $customer_id = $data->customer_id;
    
        foreach($data->products as $product) // its a array of products you showed in json 
        {
            // insert code here for mysql insert
        }
    

    【讨论】:

      【解决方案3】:

      也许您应该尝试规范化您的数据库。由于order 表的一行代表一个订单,并且您不能在一列中显示任意数量的产品(除非您只是将数组字符串化并放入。)


      您的 JSON 似乎是一个订单。直观地说,订单是由客户订购的。另一方面,一个客户可能有很多订单。所以客户与订单的关系假设为一对多的关系,由ordercustomer的外键customer_id实现

      按产品和订单关系跟进。一个产品可以在多个订单中展示。此外,一个订单可能包含许多产品。因此,产品与订单的关系应该是多对多的关系。根据经验,您应该有另一个表来维护关系。假设表order_product 有两个外键order_idproduct_id 分别指向orderproduct 表。另外,这个表应该有另外一列存储产品数量。


      我看到了你的更新,你的代码有一些错误。由于'products' 是一个数组,因此检索产品 id 和产品数量应如下所示

      $product_id = $data['products'][$i]['product_id'];
      $product_qty = $data['products'][$i]['product_qty'];
      

      【讨论】:

      • 请在您对答案投反对票后留下评论或结果。毫无意义的否决票无助于解决您的问题。
      【解决方案4】:

      尝试如下:

      <?php
      //require("config.inc.php");
      $jsondata ='{
      "customer_id": "1",
      "products":[ {
      "product_id": "1",
      "product_qty": "2"
      }, {
      "product_id": "2",
      "product_qty": "4"
      }, {
      "product_id": "3",
      "product_qty": "12"
      }, {
      "product_id": "4",
      "product_qty": "22"
      }],
      "order_totalamount": "100"
      }';
      
      //convert json object to php associative array
      $data = json_decode($jsondata, true);
      
      //get the employee details
      $cus_id = $data['customer_id'];
      $order_totalamount = $data['order_totalamount'];
      $order_totalamount = $data['order_totalamount'];
      
      foreach($data['products'] as $key => $val)
      {
          $product_id = $val['product_id'];
          $product_qty = $val['product_qty'];
      
          //insert into mysql table
          $sql = "insert into `order`(cm_id,product_id,product_quantity,order_totalamount,order_id,order_date) values ($cus_id,$product_id,$product_qty,$order_totalamount,$cus_id,CURDATE())";
      
          echo $sql;
          //$sql1 = mysql_query($sql);
          $conn = mysqli_connect($host, $username, $password, $dbname);
          // Check connection
          if (!$conn) {
              die("Connection failed: " . mysqli_connect_error());
          }
      
          if(!mysqli_query($conn,$sql))
          {
              die('Error : ' . mysql_error());
          }
      }
      ?>
      

      【讨论】:

      • 嘿,它现在工作正常。感谢您的帮助。
      【解决方案5】:

      试试这个代码

      <?php
      $json = '{
          "customer_id": "1",
          "products":[ {
              "product_id": "1",
              "product_qty": "2"
          }, {
              "product_id": "2",
              "product_qty": "4"
          }, {
              "product_id": "3",
              "product_qty": "12"
          }, {
              "product_id": "4",
              "product_qty": "22"
          }],
          "order_totalamount": "100"
      }';
      
      $obj = json_decode($json);
      $data=$obj->{'products'};
      foreach($data as $item){
      $sql = "insert into `order`(cm_id,product_id,product_quantity,order_totalamount,order_id,order_date) values ($cus_id,".$item->{'product_id'}.",".$item->{'product_qty'}.",$order_totalamount,$cus_id,CURDATE())";
      
      }
      
      
      ?>

      【讨论】:

        猜你喜欢
        • 2017-10-29
        • 1970-01-01
        • 2018-06-19
        • 2011-12-05
        • 2018-12-29
        • 2017-08-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多