Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从JSON中提取数据并使用PHP将其插入MySQL?_Php_Mysql - Fatal编程技术网

如何从JSON中提取数据并使用PHP将其插入MySQL?

如何从JSON中提取数据并使用PHP将其插入MySQL?,php,mysql,Php,Mysql,我需要从JSON fila中提取数据,并使用PHP将其插入MySQL。这是代码 <?php $connect = mysqli_connect("localhost", "root", "pass", "dbname"); //Connect PHP to MySQL Database $query = ''; $table_data = ''; $filename = "organizations.json"; $data = file_get_contents($f

我需要从JSON fila中提取数据,并使用PHP将其插入MySQL。这是代码

<?php
  $connect = mysqli_connect("localhost", "root", "pass", "dbname"); //Connect PHP to MySQL Database
  $query = '';
  $table_data = '';
  $filename = "organizations.json";
  $data = file_get_contents($filename); //Read the JSON file in PHP
  $array = json_decode($data, true); //Convert JSON String into PHP Array
  foreach($array as $row) //Extract the Array Values by using Foreach Loop - "Inserto todos los campos en la tabla pero no muestro el 'id' en la web"
  {
   $query .= "INSERT INTO organizations(id, displayName, created) VALUES ('".$row["id"]."', '".$row["displayName"]."', '".$row["created"]."'); ";  // Make Multiple Insert Query 
   $table_data .= '
        <tr>
    <td>'.$row["displayName"].'</td>
    <td>'.$row["created"].'</td>
</tr>
   '; //Data for display on Web page
  }
但它不适用于以下json文件:

[
    {
      "id": "Y2lzY29z",
      "name": "Enterprise Edition",
      "totalUnits": 1000,
      "consumedUnits": 1
    },
    {
      "id": "MGUzZjBj",
      "name": "Messaging",
      "totalUnits": 1000,
      "consumedUnits": 0
    }
]   

{
  "items": [
    {
      "id": "Y2lzY29z",
      "name": "Enterprise Edition",
      "totalUnits": 1000,
      "consumedUnits": 1
    },
    {
      "id": "MGUzZjBj",
      "name": "Messaging",
      "totalUnits": 1000,
      "consumedUnits": 0
    }
  ]
}

我不知道如何正确地编写查询

$query .= "INSERT INTO organizations
                    (id, displayName, created) 
            VALUES ('".$row["id"]."', '".$row["displayName"]."', 
                    '".$row["created"]."');

谢谢

使用相同的代码,只需在foreach循环中进行调整。仅使用
$array['items']
实例
$array

  <?php
      $connect = mysqli_connect("localhost", "root", "pass", "dbname"); //Connect PHP to MySQL Database
      $query = '';
      $table_data = '';
      $filename = "organizations.json";
      $data = file_get_contents($filename); //Read the JSON file in PHP
      $array = json_decode($data, true); //Convert JSON String into PHP Array
      foreach($array['items'] as $row) //Extract the Array Values by using Foreach Loop - "Inserto todos los campos en la tabla pero no muestro el 'id' en la web"
      {
       $query .= "INSERT INTO organizations(id, displayName, created) VALUES ('".$row["id"]."', '".$row["displayName"]."', '".$row["created"]."'); ";  // Make Multiple Insert Query 
       $table_data .= '
            <tr>
        <td>'.$row["displayName"].'</td>
        <td>'.$row["created"].'</td>
    </tr>
       '; //Data for display on Web page
      }

“它不适用于以下json文件”

…这是因为JSON中的结构不同。这应该是相当明显的——您不能期望它只自动处理您提供的任意数据结构

代码需要修改才能读取新结构。在这种特定情况下,它非常简单-您有一个内部对象保存数组,因此您必须通过该对象而不是顶级对象进行循环:

改变

foreach($array as $row)


第二个Json对象有一个字段“items”。因此,您只需要对代码进行一些小的调整:

    <?php
         ...
          $array = json_decode($data, true); 
          $items = $array["items"];
          foreach($items as $row){
          ...
          }

首先,您应该参数化查询,然后绑定值,这样可以防止

这还允许您一次准备查询,但多次使用不同的参数执行查询,从而节省到数据库的往返和查询的多次编译

当然,数组从
$array['items']

<?php
//Connect PHP to MySQL Database
$connect = mysqli_connect("localhost", "root", "pass", "dbname"); 

$filename = "organizations.json";
$data = file_get_contents($filename); //Read the JSON file in PHP
$array = json_decode($data, true); //Convert JSON String into PHP Array

//prepare the query once
$query = "INSERT INTO organizations
                    (id, displayName, created) 
            VALUES (?,?,?)"; 
$stmt = $connect->prepare($query);

foreach($array['items'] as $row) {
    $stmt->bind_param('iss',  $row['id'], $row['displayName'], $row['created']);
    $stmt->execute();

    $table_data .= "<tr>
            <td>$row[displayName]</td>
            <td>$row[created]</td>
        </tr>";
}

您是否尝试过将您的foreach更改-
foreach($array[“items”]更改为$row)
对不起,我在Json文件上粘贴了错误的变量。正确的变量为id、displayName、created。。但这不是问题所在problem@MarianoMunarriz如果你粘贴了错误的东西,你可以很容易地改变你的问题。在蓝色的“php”和“mysql”标签下面找到“edit”链接。但你是对的,这不是主要问题。请看下面的各种答案。我能够解决它,非常感谢你的帮助。我能够解决它,非常感谢你的帮助help@yourCommonSense这更符合你的要求吗
<?php
//Connect PHP to MySQL Database
$connect = mysqli_connect("localhost", "root", "pass", "dbname"); 

$filename = "organizations.json";
$data = file_get_contents($filename); //Read the JSON file in PHP
$array = json_decode($data, true); //Convert JSON String into PHP Array

//prepare the query once
$query = "INSERT INTO organizations
                    (id, displayName, created) 
            VALUES (?,?,?)"; 
$stmt = $connect->prepare($query);

foreach($array['items'] as $row) {
    $stmt->bind_param('iss',  $row['id'], $row['displayName'], $row['created']);
    $stmt->execute();

    $table_data .= "<tr>
            <td>$row[displayName]</td>
            <td>$row[created]</td>
        </tr>";
}