2016-01-13 6 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 и цикл по каждому элементу.

Просьба помочь мне в этом вопросе. Спасибо заранее.

+0

Я предлагаю вам для хранения значений переменных, поэтому $ item ['product_id'] становится $ product_id. Также, попробуйте с PDO http://php.net/manual/en/book.pdo.php – Noogic

+0

Вы получаете какую-либо ошибку? – AnkiiG

+0

@Noogic: thanx для вашего предложения, но если я храню значения в переменной, то такая же проблема возникает с вложенным массивом. потому что у меня есть несколько продуктов для одного и того же идентификатора cutomer и суммы –

ответ

-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 таблицы, представляющий заказ, и вы не можете показать произвольное количество продуктов в колонке (если вы просто stringify массив и поместить его в.)


Ваш JSON, как представляется, Заказ. И интуитивно, заказ заказывается клиентом. С другой стороны, у клиента может быть много заказов. Таким образом, отношение клиента к заказу, предполагают, чтобы быть один-ко-многим, которые должны быть реализованы с помощью внешнего ключа customer_id от order до customer

наблюдавшихся по продукции и заказов связи. Продукт может быть показан во многих порядках. Кроме того, заказ может содержать много продуктов. Следовательно, отношение «произведение к заказу» должно быть отношением «многие ко многим». Эмпирически вам нужно иметь другую таблицу для поддержания отношения. Скажем, таблица order_product имеет два внешних ключа order_id и product_id указывает на order и product таблиц, соответственно. Кроме того, в этой таблице должно быть указано количество товаров в одной колонке.


Я видел ваше обновление, в вашем коде есть ошибки. Поскольку 'products' является массивом, извлекая идентификатор продукта и количество продукта будет нравится ниже

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

 
} 
 

 

 
?>

Смежные вопросы