在数组中,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)
我有一个格式为 '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)