在数组中,json 数据并放入 MySql 和 php

in array, json data and put in MySql with php

我有一个格式为 'JSON' 的数据,如下所示:

{
    "email": "john@john.fr",
    "line_items": [
        {
            "sku": "123456789",
            "price": "0.67",
            "price_with_tax": "4.00",
            "tax_lines": [
                {
                    "title": "tax010",
                    "rate": 0.01,
                    "price": "1.11"
                },
                {
                    "title": "tax00200",
                    "rate": 0.02,
                    "price": "2.22"
                }
            ]
        },
        {
            "sku": "012345666",
            "price": "1.67",
            "price_with_tax": "5.00",
            "tax_lines": [
                {
                    "title": "tax0003000",
                    "rate": 0.03,
                    "price": "3.33"
                }
            ]
        }
    ]
}

我想通过 PDO::prepare 将其放入我的数据库 (MySql)。我的以下 sql 查询有效,但第二个 line_items 没有很好的价值 im Mysql :

第一项 ::: 物有所值

email:john@john.fr
sku:123456789
price:0.67
price_with_tax:4.00
price_tax1:1.11
price_tax2:2.22

第二项:::

email:john@john.fr
sku:012345666
price:1.67
price_with_tax:5.00

错误的值:::

price_tax1:1.11
price_tax2:2.22

我怎样才能说它物有所值?

这是我的代码:

$dataDecode = json_decode($jsondata);

$email = $dataDecode->email;

try
{
    $dtbs = new PDO($dsn_dev, $pdo_user, $pdo_password, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
}
catch (Exception $e)
{
    die('Error : ' . $e->getMessage());
}

try 
{
    foreach ($dataDecode->line_items as $obj) 
    {

        $var_sku = $obj->sku;

        $var_price = $obj->price;

        $var_price_with_tax = $obj->price_with_tax;

        $taxNewArray = array();
        foreach ($dataDecode->line_items[0]->tax_lines as $obj2)
            {
                array_push($taxNewArray , $obj2);

            }

        $val1st = array_shift($taxNewArray);
        $val2nd  = array_pop  ($taxNewArray);

        $var_tax1 = $val1st->price;
        $var_tax2 = $val2nd->price;

        $stmt = $dtbs->prepare("INSERT INTO $tabledata ($mysql_email, $mysql_sku, $mysq_price, $mysql_price_with_tax, $mysql_price__tax1___line_items, $mysql_price__tax2___line_items)
                                VALUES (:email, :sku, :price, :price_with_tax, :price_tax1, :price_tax2)"); 
        $stmt->execute(array(':email'=>$email,
                             ':sku'=>$var_sku,
                             ':price'=>$var_price,
                             ':price_with_tax'=>$var_price_with_tax,
                             ':price_tax1'=>$var_tax1,
                             ':price_tax2'=>$var_tax2
                             ));

    }

}
catch(Exception $e) 
{
    throw $e;
}

你有想法吗?

如果 tax_lines 中只有一个条目,您的代码将尝试从不存在的第二个条目设置 $var_tax2。你需要检查这个并替换一些其他值:

$var_tax2 = $val2nd ? $val2nd->price : '0.0';

另一个问题是这一行:

foreach ($dataDecode->line_items[0]->tax_lines as $obj2)

您每次都在使用第一行项目中的税行。那应该是:

foreach ($obj->tax_lines as $obj2)