[英]Insert Json data into mysql database with json datatype using php
[英]Insert JSON data into MySQL using PHP
我试图将其插入MySQL Base,但对我而言不起作用,请帮助解决此问题。 JSON如下所示:
{
"status": 1,
"response": {
"Aviator Goggles": {
"price": 1009,
"quantity": 269
},
"Aviator Sunglasses": {
"price": 460,
"quantity": 187
},
"BIKER CRATE": {
"price": 29,
"quantity": 3569
}
},
"time": 1524852778
}
我的php代码解析并插入数据:
<?php
$jsonurl = "https://api.opskins.com/IPricing/GetAllLowestListPrices/v1/?appid=578080&format=json_pretty";
$json = file_get_contents($jsonurl);
$data = json_decode($json, true);
print_r ($data);
mysql_connect("127.0.0.1", "root", "") or die (mysql_error ());
mysql_select_db("pubg") or die(mysql_error());
foreach($data as $item) {
mysql_query("INSERT INTO `c5f` (response, price, quantity)
VALUES ('".$item['response']."','".$item['price']."','".$item['quantity']."')") or die(mysql_error());
}
?>
使用PDO将数据插入数据库中; 这是一些示例代码:
// Set these to your login data
define('DB_HOST', '127.0.0.1');
define('DB_USER', 'root');
define('DB_PASS', '');
define('DB_NAME', 'pubg');
// We connect to the database using the values above
$pdo = new PDO('mysql:host='. DB_HOST .';dbname='. DB_NAME, DB_USER, DB_PASS);
// We tell PDO to report us every error
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// Now we prepare a query
$sql = $pdo->prepare('INSERT INTO `c5f` SET `response` = :response, `price` = :price, `quantity` = :quantity;');
// We can use $sql to insert data
$data = $response['data'];
foreach($data as $key => $item)
$sql->execute(array(
':response' => $key,
':price' => $item['price'],
':quantity' => $item['quantity']
));
echo 'Insert: '. htmlentities($key) .' ('. $item['quantity'] .' - '. $item['price'] .')'."\r\n";
}
这将连接到数据库,准备您的插入语句并针对每个数据集执行它。
如果查看已解码的json( print_r($data)
),则会看到以下内容:
Array
(
[status] => 1
[response] => Array
(
[Aviator Goggles] => Array
(
[price] => 1009
[quantity] => 269
)
[Aviator Sunglasses] => Array
(
[price] => 460
[quantity] => 187
)
[BIKER CRATE] => Array
(
[price] => 29
[quantity] => 3569
)
)
[time] => 1524852778
)
要进行数据库插入(我在这里复制了mysql调用,但是您确实应该至少升级到MySQLI,但我认为PDO更好,并且也要使用准备好的语句 ),您需要遍历$data['response']
:
foreach ($data['response'] as $key => $item) {
mysql_query("INSERT INTO `c5f` (response, price, quantity)
VALUES ('$key','{$item['price']}','{$item['quantity']}')") or die(mysql_error());
}
因为您的查询就像...VALUES("response")
但您的内部文字包含"
它将像...VALUES("{ "price": 460, "quantity": 187 },")
一样疯狂
您应该使用mysql_real_escape_string函数转义所有内部文本:
"... VALUES ('".mysql_real_escape_string($item['response'])."', ..."
玩得开心
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.