【问题标题】:in array, json data and put in MySql with php在数组中,json数据并用php放入MySql
【发布时间】:2015-07-11 17:40:55
【问题描述】:

我有一个像这样的“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 在 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;
}

你有什么想法吗?

【问题讨论】:

  • $val2nd = array_pop($taxNewArray) 仅在tax_lines 中至少有两个条目时才有效。第二行项目只有一个税行。
  • 嗨,Barmar,我必须做什么?有时,我们有两个条目,有时我们只有一个:这取决于项目...
  • 使用if 语句测试是否有第二个条目。
  • 带有计数功能的if语句?

标签: arrays json pdo prepare


【解决方案1】:

如果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)

【讨论】:

  • 嗨 Barmar,我用你的 if 语句 试过了,但我在 Mysql 中再次出现了同样的错误值。我认为 array_pop 在我的情况下不好。我必须找到另一个解决方案倒我的阵列,但我不知道哪个解决方案?
  • 是的:你说得对,Barmar,你就是原因...我有一些大错误:非常感谢它适用于您的代码,例如://foreach ($dataDecode->line_items[0]->tax_lines as $obj2)foreach ($obj->tax_lines as $obj2)//$var_tax2 = $val2nd->price; $var_tax2 = $val2nd ? $val2nd->price : '0.0';
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-21
  • 1970-01-01
  • 2017-03-19
相关资源
最近更新 更多