2016-01-13 145 views
-1

我想插入一个JSON数组到我的MySQL数据库。下面是该阵列的格式:插入嵌套的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循环。

请帮助我解决这个问题。 在此先感谢。

+0

我建议你到值存储在变量,所以$ item ['product_id']变成$ product_id。 另外,尝试与PDO http://php.net/manual/en/book.pdo.php – Noogic

+0

你有任何错误? – AnkiiG

+0

@Noogic:thanx你的建议,但如果我在变量中存储值,那么同样的问题出现在嵌套数组中。因为我有多个产品相同的cutomer ID和金额 –

回答

-1

尝试如下:

<?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()); 
    } 
} 
?> 
+0

尝试添加评论,当你投下任何答案.. – AnkiiG

+0

感谢您的答案,但它并没有为我工作。 –

+0

您是否收到任何错误? @ RU_23 – AnkiiG

-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())"; 
 

 
} 
 

 

 
?>

+1

感谢您的回答,但它没有奏效。 –

1

可能是你应该去尝试标准化您的数据库。由于order表中的行表示订单,你不能显示在列的产品任意金额(除非你只是字符串化的阵列,并把它放在)


你的JSON似乎是订单。直观地说,订单是由客户订购的。另一方面,客户可能有很多订单。因此,客户对订单的关系假设是一个一对多的关系,应当由一个外键customer_idorder实现以customer

跟进的产品和订单的关系。产品可以以很多顺序显示。此外,订单可能包含许多产品。因此,产品订购关系应该是多对多的关系。经验上,你应该有另一张桌子来维护这种关系。假设表order_product分别有两个外键order_idproduct_id分别指向orderproduct表。另外,这张表应该有另外一栏存储产品数量。


我看到您的更新,您的代码中存在一些错误。由于'products'是一个数组,检索产品ID和产品数量应像下面

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

请在投票答案后投票发表评论或者结果。无意义的投票无助于解决你的问题。 – Ire

0

试试这个代码

$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 
    } 
0

<?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())"; 
 

 
} 
 

 

 
?>