【问题标题】:Insert JSON responses into MySQL table with multiple responses将 JSON 响应插入具有多个响应的 MySQL 表中
【发布时间】:2014-11-19 04:04:01
【问题描述】:

我有一个 PHP 文件,可以将来自 JSON 响应的数据插入 MySQL 表。代码如下所示:

    $jsondata = json_decode($result);
    $results = $jsondata->results;

$insert = $con->prepare('INSERT INTO History (URL, Product, Price, Status) VALUES(?, ?, ?, ?) ');

    foreach($results as $val) {


    $insert->bind_param('ssss', $val->title, $val->title, $val->price, $val->{'status/_text'});

    // //echo $val->status;
    // echo $val->{'status/_title'};

    $insert->execute();

不幸的是,这仅在我的 JSON 响应中有 1 项返回时才有效。如果我有两个,对于除价格之外的所有值,它只是将单词 ARRAY 插入到我的 MySQL 表中。

这是一个带有 1 个项目的 JSON 响应示例:

{
   "offset": 0,
   "results": [
      {
         "status/_text": "Available",
         "status/_source": "itemID.2251694279/example333632279/",
         "status/_title": "Available",
         "title": "Product 1",
         "status": "http://www.example.comitemID.2251694279/example333632279/"
      }
   ],
   "cookies": [
      "SESSION=\""
   ],
   "GUID": "123123123",
   "GUID2": "123123123",
   "pageUrl": "http://www.example.com/279"
}

这是一个包含 2 个项目的 JSON 响应示例:

{
   "offset": 0,
   "results": [
      {
         "status/_text": [
            "Available",
            "Available"
         ],
         "price": "$39.29",
         "status/_source": [
            "itemID.30227999279/example333632279/",
            "itemID.30201279279/example333632279/"
         ],
         "status/_title": [
            "Available",
            "Available"
         ],
         "title": [
            "Product 1",
            "Product 2"
         ],
         "status": [
            "http://www.example.comitemID.30227999279/example333632279/",
            "http://www.example.comitemID.30201279279/example333632279/"
         ]
      }
   ],
   "cookies": [
      "SESSION=\"m\";Port=\"20\"",
      "X-AK-Origin-Instance=\"1\";Path=\"/\";Domain=\"www.example.com\";Port=\"20\""
   ],
   "GUID": "123123123",
   "GUID2": "123123123",
   "pageUrl": "http://www.example.com/279"
}

任何提示将不胜感激!

【问题讨论】:

  • 您需要从一个循环开始,可能最简单的方法是将该 JSON 排序为一个数组,其中包含具有简单属性的子数组,而不是将它们全部包含在列/属性名称中。然后循环它并执行插入,或者更好的是,创建一个包含多个语句的插入。
  • 价格总是单一的元素吗?如果有多个字段,其他字段的长度是否都相同?
  • 价格可以不止一个 - 除了价格之外,其他字段可能相同

标签: php mysql json


【解决方案1】:

它打印“Array”的原因是因为您尝试插入的对象是一个数组。

你可以试试这个来查看值:

for ($i=0; $i < count($results->title); $i++) {
  echo $results->title[$i] . "<br/>";
}

但我认为要解决您的问题,您可以尝试更改服务器端生成 Json 对象的方式。

【讨论】:

  • 您好 - 我无法更改服务器端 json,因为它来自第三方应用程序。关于如何将该 for 语句放入 SQL 插入中的任何建议?我似乎无法从 json 数组中获取数据
  • 您是否尝试过使用我上面的示例代码模板?尝试在您的脚本中插入上面的代码,它应该打印 JSON 对象中的标题。如果可行,请尝试在 Json 对象中添加除价格之外的其他变量的变量。
  • 嗨 Nikko - 这给了我消息注意:如果我把它放在 for each 中,试图获取非对象的属性。如果我只放 echo $val->title[0] 。 “
    ”我确实得到了一个值!不确定如何在 foreach 中循环以获得所有结果?
  • 嗨,AAA,抱歉,它应该是 $results->title[0] 而不是 $val->title[$i]
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多