簡體   English   中英

使用PHP將JSON數據插入MySQL

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM